mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
生产单管理更新还原、作废等接口
This commit is contained in:
+2
-2
@@ -9,9 +9,9 @@ import lombok.Getter;
|
||||
public enum ProcessProcessingTypeEnum {
|
||||
|
||||
|
||||
COMPONENTPROCESSING(7L,"组件加工");
|
||||
COMPONENTPROCESSING(7,"组件加工");
|
||||
|
||||
private Long number;
|
||||
private Integer number;
|
||||
private String fabricatedItem;
|
||||
|
||||
public boolean equals(Integer number) {
|
||||
|
||||
Vendored
+11
-3
@@ -17,13 +17,21 @@ import java.util.concurrent.Executors;
|
||||
public class CacheUtils {
|
||||
|
||||
public static <K, V> LoadingCache<K, V> buildAsyncReloadingCache(Duration duration, CacheLoader<K, V> loader) {
|
||||
Executor executor = Executors.newCachedThreadPool( // TODO 晨丰:可能要思考下,未来要不要做成可配置
|
||||
TtlExecutors.getDefaultDisableInheritableThreadFactory()); // TTL 保证 ThreadLocal 可以透传
|
||||
return CacheBuilder.newBuilder()
|
||||
// 只阻塞当前数据加载线程,其他线程返回旧值
|
||||
.refreshAfterWrite(duration)
|
||||
// 通过 asyncReloading 实现全异步加载,包括 refreshAfterWrite 被阻塞的加载线程
|
||||
.build(CacheLoader.asyncReloading(loader, executor));
|
||||
.build(CacheLoader.asyncReloading(loader, Executors.newCachedThreadPool())); // TODO 芋艿:可能要思考下,未来要不要做成可配置
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建同步刷新的 LoadingCache 对象
|
||||
*
|
||||
* @param duration 过期时间
|
||||
* @param loader CacheLoader 对象
|
||||
* @return LoadingCache 对象
|
||||
*/
|
||||
public static <K, V> LoadingCache<K, V> buildCache(Duration duration, CacheLoader<K, V> loader) {
|
||||
return CacheBuilder.newBuilder().refreshAfterWrite(duration).build(loader);
|
||||
}
|
||||
}
|
||||
|
||||
+6
-2
@@ -21,6 +21,11 @@ public class OrganContextHolder {
|
||||
*/
|
||||
private static final ThreadLocal<Boolean> IGNORE = new TransmittableThreadLocal<>();
|
||||
|
||||
/**
|
||||
* 上下文获取不到organid异常提示
|
||||
*/
|
||||
public static final String ORGANID_NOT_EXIST_EXCEPTION = "OrganContextHolder 不存在组织编号!";
|
||||
|
||||
/**
|
||||
* 获得组织编号
|
||||
*
|
||||
@@ -48,8 +53,7 @@ public class OrganContextHolder {
|
||||
public static Long getRequiredOrganId() {
|
||||
Long organId = getOrganId();
|
||||
if (organId == null) {
|
||||
throw new NullPointerException("OrganContextHolder 不存在组织编号!可参考文档:"
|
||||
+ DocumentEnum.ORGAN.getUrl());
|
||||
throw new NullPointerException(ORGANID_NOT_EXIST_EXCEPTION);
|
||||
}
|
||||
return organId;
|
||||
}
|
||||
|
||||
+1
-12
@@ -1,8 +1,6 @@
|
||||
package com.cf.imes.framework.organ.core.security;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.cf.imes.framework.common.enums.RpcConstants;
|
||||
import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants;
|
||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||
import com.cf.imes.framework.common.util.servlet.ServletUtils;
|
||||
@@ -56,18 +54,10 @@ public class OrganSecurityWebFilter extends ApiRequestFilter {
|
||||
this.organFrameworkService = organFrameworkService;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldNotFilter(HttpServletRequest request) {
|
||||
return super.shouldNotFilter(request) &&
|
||||
!StrUtil.startWithAny(request.getRequestURI(), RpcConstants.RPC_API_PREFIX); // 因为 RPC API 也会透传组织编号
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
|
||||
throws ServletException, IOException {
|
||||
Long organId = WebFrameworkUtils.getOrganId(request);
|
||||
//Long organId = OrganContextHolder.getOrganId();
|
||||
boolean isRpcRequest = WebFrameworkUtils.isRpcRequest(request);
|
||||
// 1. 登陆的用户,校验是否有权限访问该组织,避免越权问题。
|
||||
LoginUser user = SecurityFrameworkUtils.getLoginUser();
|
||||
if (user != null) {
|
||||
@@ -76,8 +66,7 @@ public class OrganSecurityWebFilter extends ApiRequestFilter {
|
||||
organId = user.getOrganId();
|
||||
OrganContextHolder.setOrganId(organId);
|
||||
// 如果传递了组织编号,则进行比对组织编号,避免越权问题
|
||||
} else if (!Objects.equals(user.getOrganId(), OrganContextHolder.getOrganId())
|
||||
&& !isRpcRequest) { // Cloud 特殊逻辑:如果是 RPC 请求,就不校验了。主要考虑,一些场景下,会调用 OrganUtils 去切换组织
|
||||
} else if (!Objects.equals(user.getOrganId(), OrganContextHolder.getOrganId())) { // Cloud 特殊逻辑:如果是 RPC 请求,就不校验了。主要考虑,一些场景下,会调用 OrganUtils 去切换组织
|
||||
log.error("[doFilterInternal][组织({}) User({}/{}) 越权访问组织({}) URL({}/{})]",
|
||||
user.getOrganId(), user.getId(), user.getUserType(),
|
||||
OrganContextHolder.getOrganId(), request.getRequestURI(), request.getMethod());
|
||||
|
||||
+21
@@ -7,6 +7,7 @@ import com.cf.imes.framework.common.enums.DocumentEnum;
|
||||
import com.cf.imes.framework.mq.redis.core.RedisMQTemplate;
|
||||
import com.cf.imes.framework.mq.redis.core.job.RedisPendingMessageResendJob;
|
||||
import com.cf.imes.framework.mq.redis.core.pubsub.AbstractRedisChannelMessageListener;
|
||||
import com.cf.imes.framework.mq.redis.core.pubsub.AbstractRedisSimpleMessageListener;
|
||||
import com.cf.imes.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener;
|
||||
import com.cf.imes.framework.redis.config.ChenfengRedisAutoConfiguration;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -61,6 +62,26 @@ public class ChenfengRedisMQConsumerAutoConfiguration {
|
||||
return container;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建 Redis Pub/Sub 广播消费的容器
|
||||
*/
|
||||
@Bean
|
||||
@ConditionalOnBean(AbstractRedisSimpleMessageListener.class)
|
||||
public RedisMessageListenerContainer redisDelListenerContainer(
|
||||
RedisTemplate redisTemplate, List<AbstractRedisSimpleMessageListener> listeners) {
|
||||
// 创建 RedisMessageListenerContainer 对象
|
||||
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
|
||||
// 设置 RedisConnection 工厂。
|
||||
container.setConnectionFactory(redisTemplate.getRequiredConnectionFactory());
|
||||
// 添加监听器
|
||||
listeners.forEach(listener -> {
|
||||
container.addMessageListener(listener, listener.getTopic());
|
||||
log.info("[redisMessageListenerContainer][注册 ChannelTopic({}) 对应的监听器({})]",
|
||||
listener.getTopic(), listener.getClass().getName());
|
||||
});
|
||||
return container;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建 Redis Stream 重新消费的任务
|
||||
*/
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.cf.imes.framework.mq.redis.core.pubsub;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.data.redis.connection.MessageListener;
|
||||
import org.springframework.data.redis.listener.ChannelTopic;
|
||||
|
||||
/**
|
||||
* Redis监听器
|
||||
*
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
public abstract class AbstractRedisSimpleMessageListener implements MessageListener {
|
||||
|
||||
/**
|
||||
* 通道主题
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
private ChannelTopic topic;
|
||||
}
|
||||
+11
-3
@@ -111,21 +111,29 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
|
||||
|
||||
Long organId = null;
|
||||
|
||||
/**
|
||||
* 用户首次密码登陆的时候,不会有token带入,直接捕捉异常抛出即可,组织ID后续会根据用户登录的组织进行填入,
|
||||
* 这里的组织ID字段填入即使为空也可,后续的请求中都会带有token,再从缓存中获取到 token 数据,再获取组织ID,填入即可
|
||||
*/
|
||||
try {
|
||||
// 获取 token 对应的缓存数据,并得到组织 ID
|
||||
OAuth2AccessTokenDO oAuth2AccessTokenDO = get(authorization);
|
||||
organId = oAuth2AccessTokenDO.getOrganId();
|
||||
|
||||
|
||||
}catch (Exception e){
|
||||
|
||||
}
|
||||
|
||||
this.strictUpdateFill(metaObject, "organId", Long.class, organId );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 从请求中获取到 token
|
||||
public static String obtainAuthorization(HttpServletRequest request,
|
||||
String headerName, String parameterName) {
|
||||
private static String obtainAuthorization(HttpServletRequest request,
|
||||
String headerName, String parameterName) {
|
||||
// 1. 获得 Token。优先级:Header > Parameter
|
||||
String token = request.getHeader(headerName);
|
||||
if (StrUtil.isEmpty(token)) {
|
||||
@@ -141,7 +149,7 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
|
||||
|
||||
|
||||
// 从缓存中获取到缓存的数据
|
||||
public OAuth2AccessTokenDO get(String accessToken) {
|
||||
private OAuth2AccessTokenDO get(String accessToken) {
|
||||
String redisKey = String.format(OAUTH2_ACCESS_TOKEN, accessToken);
|
||||
return JsonUtils.parseObject(stringRedisTemplate.opsForValue().get(redisKey), OAuth2AccessTokenDO.class);
|
||||
}
|
||||
|
||||
+11
-5
@@ -15,6 +15,8 @@ import com.cf.imes.module.system.api.oauth2.OAuth2TokenApi;
|
||||
import com.cf.imes.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO;
|
||||
import com.cf.imes.module.system.api.permission.PermissionApi;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
import org.springframework.web.filter.OncePerRequestFilter;
|
||||
|
||||
@@ -33,6 +35,7 @@ import java.nio.charset.StandardCharsets;
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class TokenAuthenticationFilter extends OncePerRequestFilter {
|
||||
|
||||
private final SecurityProperties securityProperties;
|
||||
@@ -129,14 +132,17 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
|
||||
.setOrganId(WebFrameworkUtils.getOrganId(request));
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
private LoginUser buildLoginUserByHeader(HttpServletRequest request) {
|
||||
String loginUserStr = request.getHeader(SecurityFrameworkUtils.LOGIN_USER_HEADER);
|
||||
if(StrUtil.isNotEmpty(loginUserStr)) {
|
||||
LoginUser loginUser = JsonUtils.parseObject(loginUserStr, LoginUser.class);
|
||||
//CommonResult<Boolean> superAdmin = permissionApi.hasAnyRoles(loginUser.getId(), "super_admin");
|
||||
//loginUser.setIsSupAdmin(superAdmin.getCheckedData());
|
||||
loginUser.setNickname(URLDecoder.decode(loginUser.getNickname(),StandardCharsets.UTF_8));
|
||||
return loginUser;
|
||||
try {
|
||||
loginUserStr = URLDecoder.decode(loginUserStr, StandardCharsets.UTF_8.name()); // 解码,解决中文乱码问题
|
||||
return JsonUtils.parseObject(loginUserStr, LoginUser.class);
|
||||
} catch (Exception ex) {
|
||||
log.error("[buildLoginUserByHeader][解析 LoginUser({}) 发生异常]", loginUserStr, ex); ;
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
+16
-2
@@ -1,23 +1,37 @@
|
||||
package com.cf.imes.framework.security.core.rpc;
|
||||
|
||||
import com.cf.imes.framework.rpc.core.util.FeignUtils;
|
||||
import com.cf.imes.framework.common.util.json.JsonUtils;
|
||||
import com.cf.imes.framework.security.core.LoginUser;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import feign.RequestInterceptor;
|
||||
import feign.RequestTemplate;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* LoginUser 的 RequestInterceptor 实现类:Feign 请求时,将 {@link LoginUser} 设置到 header 中,继续透传给被调用的服务
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
@Slf4j
|
||||
public class LoginUserRequestInterceptor implements RequestInterceptor {
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void apply(RequestTemplate requestTemplate) {
|
||||
LoginUser user = SecurityFrameworkUtils.getLoginUser();
|
||||
if (user != null) {
|
||||
FeignUtils.createJsonHeader(requestTemplate, SecurityFrameworkUtils.LOGIN_USER_HEADER, user);
|
||||
try {
|
||||
String userStr = JsonUtils.toJsonString(user);
|
||||
userStr = URLEncoder.encode(userStr, StandardCharsets.UTF_8.name()); // 编码,避免中文乱码
|
||||
requestTemplate.header(SecurityFrameworkUtils.LOGIN_USER_HEADER, userStr);
|
||||
} catch (Exception ex) {
|
||||
log.error("[apply][序列化 LoginUser({}) 发生异常]", user, ex);
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
@@ -23,6 +23,13 @@ public interface SecurityFrameworkService {
|
||||
*/
|
||||
boolean hasAnyPermissions(String... permissions);
|
||||
|
||||
/**
|
||||
* 清空本地缓存
|
||||
*
|
||||
* @param
|
||||
*/
|
||||
void invalidateAll();
|
||||
|
||||
/**
|
||||
* 判断是否有角色
|
||||
*
|
||||
|
||||
+7
-2
@@ -28,7 +28,7 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
|
||||
/**
|
||||
* 针对 {@link #hasAnyRoles(String...)} 的缓存
|
||||
*/
|
||||
private final LoadingCache<KeyValue<Long, List<String>>, Boolean> hasAnyRolesCache = CacheUtils.buildAsyncReloadingCache(
|
||||
private final LoadingCache<KeyValue<Long, List<String>>, Boolean> hasAnyRolesCache = CacheUtils.buildCache(
|
||||
Duration.ofMinutes(1L), // 过期时间 1 分钟
|
||||
new CacheLoader<KeyValue<Long, List<String>>, Boolean>() {
|
||||
|
||||
@@ -42,7 +42,7 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
|
||||
/**
|
||||
* 针对 {@link #hasAnyPermissions(String...)} 的缓存
|
||||
*/
|
||||
private final LoadingCache<KeyValue<Long, List<String>>, Boolean> hasAnyPermissionsCache = CacheUtils.buildAsyncReloadingCache(
|
||||
private final LoadingCache<KeyValue<Long, List<String>>, Boolean> hasAnyPermissionsCache = CacheUtils.buildCache(
|
||||
Duration.ofMinutes(1L), // 过期时间 1 分钟
|
||||
new CacheLoader<KeyValue<Long, List<String>>, Boolean>() {
|
||||
|
||||
@@ -65,6 +65,11 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
|
||||
return hasAnyPermissionsCache.get(new KeyValue<>(SecurityFrameworkUtils.getLoginUserId(), Arrays.asList(permissions)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidateAll() {
|
||||
hasAnyPermissionsCache.invalidateAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasRole(String role) {
|
||||
return hasAnyRoles(role);
|
||||
|
||||
+1
-21
@@ -22,11 +22,7 @@ import org.springframework.web.reactive.function.client.WebClient;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
|
||||
@@ -74,14 +70,6 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
|
||||
|
||||
});
|
||||
|
||||
private final LoadingCache<String, Long> organIdCache = CacheUtils.buildAsyncReloadingCache(Duration.ofMinutes(1L), // 过期时间 1 分钟
|
||||
new CacheLoader<>() {
|
||||
@Override
|
||||
public Long load(String token) {
|
||||
return getOrganIdByToken(token).block();
|
||||
}
|
||||
});
|
||||
|
||||
public TokenAuthenticationFilter(ReactorLoadBalancerExchangeFilterFunction lbFunction) {
|
||||
// Q:为什么不使用 OAuth2TokenApi 进行调用?
|
||||
// A1:Spring Cloud OpenFeign 官方未内置 Reactive 的支持 https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#reactive-support
|
||||
@@ -144,17 +132,9 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
|
||||
private Mono<String> checkAccessToken(Long organId, String token) {
|
||||
return webClient.get()
|
||||
.uri(OAuth2TokenApi.URL_CHECK, uriBuilder -> uriBuilder.queryParam("accessToken", token).build())
|
||||
// .headers(httpHeaders -> WebFrameworkUtils.setOrganIdHeader(organId, httpHeaders)) // 设置组织的 Header
|
||||
.retrieve().bodyToMono(String.class);
|
||||
}
|
||||
|
||||
private Mono<Long> getOrganIdByToken(String token) {
|
||||
return webClient.get()
|
||||
.uri(OAuth2TokenApi.URL_ORGAN, uriBuilder -> uriBuilder.queryParam("accessToken", token).build())
|
||||
.retrieve()
|
||||
.bodyToMono(Long.class);
|
||||
}
|
||||
|
||||
private LoginUser buildUser(String body) {
|
||||
// 处理结果,结果不正确
|
||||
CommonResult<OAuth2AccessTokenCheckRespDTO> result = JsonUtils.parseObject(body, CHECK_RESULT_TYPE_REFERENCE);
|
||||
@@ -175,7 +155,7 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
|
||||
.setOrganId(tokenInfo.getOrganId()).setScopes(tokenInfo.getScopes())
|
||||
.setLarge(tokenInfo.getLarge()).setDbNo(tokenInfo.getDbNo()).setTableNo(tokenInfo.getTableNo())
|
||||
.setDataCode(tokenInfo.getDataCode()).setIsSupAdmin(tokenInfo.getIsSupAdmin())
|
||||
.setNickname(URLEncoder.encode(tokenInfo.getNickname(), StandardCharsets.UTF_8));
|
||||
.setNickname(tokenInfo.getNickname());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,10 +3,15 @@ package com.cf.imes.gateway.util;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import com.cf.imes.framework.common.util.json.JsonUtils;
|
||||
import com.cf.imes.gateway.filter.security.LoginUser;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* 安全服务工具类
|
||||
*
|
||||
@@ -14,6 +19,7 @@ import org.springframework.web.server.ServerWebExchange;
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
@Slf4j
|
||||
public class SecurityFrameworkUtils {
|
||||
|
||||
private static final String AUTHORIZATION_HEADER = "Authorization";
|
||||
@@ -101,8 +107,16 @@ public class SecurityFrameworkUtils {
|
||||
* @param builder 请求
|
||||
* @param user 用户
|
||||
*/
|
||||
@SneakyThrows
|
||||
public static void setLoginUserHeader(ServerHttpRequest.Builder builder, LoginUser user) {
|
||||
builder.header(LOGIN_USER_HEADER, JsonUtils.toJsonString(user));
|
||||
try {
|
||||
String userStr = JsonUtils.toJsonString(user);
|
||||
userStr = URLEncoder.encode(userStr, StandardCharsets.UTF_8.name()); // 编码,避免中文乱码
|
||||
builder.header(LOGIN_USER_HEADER, userStr);
|
||||
} catch (Exception ex) {
|
||||
log.error("[setLoginUserHeader][序列化 user({}) 发生异常]", user, ex);
|
||||
throw ex;
|
||||
}
|
||||
builder.header(DATA_CODE, user.getDataCode());
|
||||
builder.header(ORGAN_ID, user.getOrganId().toString());
|
||||
}
|
||||
|
||||
+5
-2
@@ -13,6 +13,8 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
import com.cf.imes.module.executor.controller.admin.goods.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
/**
|
||||
* 生产单商品 Mapper
|
||||
*
|
||||
@@ -23,6 +25,7 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
|
||||
|
||||
default PageResult<GoodsDO> selectPage(GoodsPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<GoodsDO>()
|
||||
.eq(GoodsDO::getOrganId,getUserOrganId())
|
||||
.eqIfPresent(GoodsDO::getOrderId, reqVO.getOrderId())
|
||||
.eqIfPresent(GoodsDO::getRawGoodsId, reqVO.getRawGoodsId())
|
||||
.eqIfPresent(GoodsDO::getGoodsId, reqVO.getGoodsId())
|
||||
@@ -41,10 +44,10 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
|
||||
}
|
||||
|
||||
|
||||
List<GoodsReqVO> selectGoodsList(@Param("orderId") Long orderId);
|
||||
List<GoodsReqVO> selectGoodsList(@Param("orderId") Long orderId,@Param("organId") Long organId);
|
||||
|
||||
|
||||
List<GoodsReqVO> selectGoodsListByOrderIds(@Param("orderIds") List<Long> orderIds);
|
||||
List<GoodsReqVO> selectGoodsListByOrderIds(@Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
|
||||
|
||||
|
||||
// 单个修改删除状态
|
||||
|
||||
+3
@@ -9,6 +9,8 @@ import com.cf.imes.module.executor.dal.dataobject.module.ModuleDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.cf.imes.module.executor.controller.admin.module.vo.*;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
/**
|
||||
* 生产单模块 Mapper
|
||||
*
|
||||
@@ -19,6 +21,7 @@ public interface ModuleMapper extends BaseMapperX<ModuleDO> {
|
||||
|
||||
default PageResult<ModuleDO> selectPage(ModulePageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<ModuleDO>()
|
||||
.eq(ModuleDO::getOrganId,getUserOrganId())
|
||||
.eqIfPresent(ModuleDO::getOrderId, reqVO.getOrderId())
|
||||
.likeIfPresent(ModuleDO::getName, reqVO.getName())
|
||||
.eqIfPresent(ModuleDO::getParentId, reqVO.getParentId())
|
||||
|
||||
+2
-2
@@ -41,10 +41,10 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
|
||||
@Param("deleted") Integer deleted);
|
||||
|
||||
|
||||
List<PlateRespVO> selectPlateList(PlateDetailReqVO reqVO);
|
||||
List<PlateRespVO> selectPlateList( @Param("reqVO") PlateDetailReqVO reqVO,@Param("organId") Long organId);
|
||||
|
||||
|
||||
PlateDetailRespVO selectPlateNumList(@Param("orderId") Long orderId);
|
||||
PlateDetailRespVO selectPlateNumList(@Param("orderId") Long orderId,@Param("organId") Long organId);
|
||||
|
||||
|
||||
void deleteByPlateId(@Param("deletePlateIds") List<Long> deletePlateIds);
|
||||
|
||||
+4
-1
@@ -18,6 +18,8 @@ import com.cf.imes.module.executor.controller.admin.orderParts.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
/**
|
||||
* 生产单配件表 order_parts_{N} Mapper
|
||||
*
|
||||
@@ -28,6 +30,7 @@ public interface OrderPartsMapper extends BaseMapperX<OrderPartsDO> {
|
||||
|
||||
default PageResult<OrderPartsDO> selectPage(OrderPartsPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<OrderPartsDO>()
|
||||
.eq(OrderPartsDO::getOrganId,getUserOrganId())
|
||||
.eqIfPresent(OrderPartsDO::getOrderId, reqVO.getOrderId())
|
||||
.eqIfPresent(OrderPartsDO::getGoodsId, reqVO.getGoodsId())
|
||||
.likeIfPresent(OrderPartsDO::getName, reqVO.getName())
|
||||
@@ -62,7 +65,7 @@ public interface OrderPartsMapper extends BaseMapperX<OrderPartsDO> {
|
||||
return respVO;
|
||||
}
|
||||
|
||||
IPage<OrderPartsRespVO> selectProductList(@Param("page") IPage<OrderPartsRespVO> page , @Param("orderId")Long orderId, @Param("roomId")Long roomId , @Param("bodyId")Long bodyId);
|
||||
IPage<OrderPartsRespVO> selectProductList(@Param("page") IPage<OrderPartsRespVO> page , @Param("orderId")Long orderId, @Param("roomId")Long roomId , @Param("bodyId")Long bodyId,@Param("organId")Long organId);
|
||||
|
||||
List<PartGoodsRespVO> selectPartDetail(@Param("orderId") Long orderId, @Param("organId") Long organId);// 配件明细
|
||||
|
||||
|
||||
+6
-1
@@ -13,6 +13,9 @@ import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
/**
|
||||
* 生产单开料排单 Mapper
|
||||
@@ -25,6 +28,7 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
|
||||
default PageResult<PlanDO> selectPage(PlanPageReqVO reqVO) {
|
||||
if(StrUtil.isNotBlank(reqVO.getCustomer())) {
|
||||
return selectJoinPage(reqVO, PlanDO.class, new MPJLambdaWrapperX<PlanDO>()
|
||||
.eq(PlanDO::getOrganId,getUserOrganId())
|
||||
.eqIfPresent(PlanDO::getPlanNo, reqVO.getPlanNo())
|
||||
.eqIfPresent(PlanDO::getSort, reqVO.getSort())
|
||||
.eqIfPresent(PlanDO::getType, reqVO.getType())
|
||||
@@ -47,6 +51,7 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
|
||||
}
|
||||
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<PlanDO>()
|
||||
.eq(PlanDO::getOrganId,getUserOrganId())
|
||||
.eqIfPresent(PlanDO::getPlanNo, reqVO.getPlanNo())
|
||||
.eqIfPresent(PlanDO::getSort, reqVO.getSort())
|
||||
.eqIfPresent(PlanDO::getType, reqVO.getType())
|
||||
@@ -63,7 +68,7 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
|
||||
// .orderByDesc(PlanDO::getId));
|
||||
}
|
||||
|
||||
List<PlateOptimize> selectPlateListByPlanId(Long planId);
|
||||
List<PlateOptimize> selectPlateListByPlanId(@Param("planId") Long planId, @Param("organId") Long organId);
|
||||
|
||||
OptimizeParamRespVO getOptimizePlanParam(Long planId);
|
||||
|
||||
|
||||
+1
-1
@@ -19,5 +19,5 @@ import org.apache.ibatis.annotations.Param;
|
||||
public interface PlanItemMapper extends BaseMapperX<PlanItemDO> {
|
||||
|
||||
|
||||
List<PlateInfoVO> selectGoodsList(@Param("planIds") List<Long> planIds);
|
||||
List<PlateInfoVO> selectGoodsList(@Param("planIds") List<Long> planIds, @Param("organId") Long organId);
|
||||
}
|
||||
+10
-5
@@ -19,6 +19,8 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
import com.cf.imes.module.executor.controller.admin.plate.vo.*;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
/**
|
||||
* 生产单板件 Mapper
|
||||
*
|
||||
@@ -29,6 +31,7 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
|
||||
|
||||
default PageResult<PlateDO> selectPage(PlatePageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<PlateDO>()
|
||||
.eq(PlateDO::getOrganId,getUserOrganId())
|
||||
.eqIfPresent(PlateDO::getOrderId, reqVO.getOrderId())
|
||||
.likeIfPresent(PlateDO::getName, reqVO.getName())
|
||||
.eqIfPresent(PlateDO::getType, reqVO.getType())
|
||||
@@ -66,22 +69,24 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
|
||||
}
|
||||
|
||||
// IPage<PlatePage> selectPlatePage(@Param("page") IPage<PlatePage> page, @Param("orderId")Long organId, @Param("goodsId") String goodsId);
|
||||
List<PlatePage> selectPlatePage(/*@Param("page") IPage<PlatePage> page,*/ @Param("orderId")Long organId/*, @Param("goodsId") String goodsId*/);
|
||||
List<PlatePage> selectPlatePage(/*@Param("page") IPage<PlatePage> page,*/ @Param("orderId")Long orderId,@Param("organId") Long organId/*, @Param("goodsId") String goodsId*/);
|
||||
|
||||
IPage<PlateResList> selectPlateByPlanId(@Param("page") IPage<PlateResList> page, @Param(Constants.WRAPPER) Wrapper<PlateDO> wrapper);
|
||||
|
||||
List<PlateParam> selectPlateList(Long planId);
|
||||
|
||||
IPage<PlateRespVO> selectProductList(@Param("page") IPage<PlateRespVO> page , @Param("orderId")Long orderId, @Param("roomId")Long roomId , @Param("bodyId")Long bodyId);
|
||||
|
||||
Set<Long> selectBatchOrderIdsAndGoodsIds(@Param("itemList") List<PlanSaveReqVO.Item> itemList);
|
||||
IPage<PlateRespVO> selectProductList(@Param("page") IPage<PlateRespVO> page , @Param("orderId")Long orderId, @Param("roomId")Long roomId , @Param("bodyId")Long bodyId,@Param("organId") Long organId);
|
||||
|
||||
|
||||
Set<Long> selectBatchOrderIdsAndGoodsIds(@Param("itemList") List<PlanSaveReqVO.Item> itemList, @Param("organId") Long organId );
|
||||
|
||||
// PlateDetailRespVO selectPlateNumList(PlateDetailReqVO reqVO);
|
||||
|
||||
List<PlateDetialRespVO> selectPlateDetialList(@Param("orderId") Long orderId);
|
||||
List<PlateDetialRespVO> selectPlateDetialList(@Param("orderId") Long orderId,@Param("organId") Long organId);
|
||||
|
||||
|
||||
List<PlateDetialRespVO> selectPlateDetialListByIds(@Param("orderIds") List<Long> orderIds);
|
||||
List<PlateDetialRespVO> selectPlateDetialListByIds(@Param("orderIds") List<Long> orderIds,@Param("organId") Long organId);
|
||||
|
||||
|
||||
List<PlateGoodsRespVO> selectPlateGoodsList(@Param("orderId") Long orderId, @Param("organId") Long organId); // 明细
|
||||
|
||||
+3
@@ -11,6 +11,8 @@ import com.cf.imes.module.executor.dal.dataobject.processStep.ProcessStepDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import com.cf.imes.module.executor.controller.admin.processStep.vo.*;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
/**
|
||||
* 生产单工序步骤 Mapper
|
||||
*
|
||||
@@ -22,6 +24,7 @@ public interface ProcessStepMapper extends BaseMapperX<ProcessStepDO> {
|
||||
default PageResult<ProcessStepDO> selectPage(ProcessStepPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<ProcessStepDO>()
|
||||
.eqIfPresent(ProcessStepDO::getOrderId, reqVO.getOrderId())
|
||||
.eq(ProcessStepDO::getOrganId,getUserOrganId())
|
||||
.betweenIfPresent(ProcessStepDO::getFinishTime, reqVO.getFinishTime())
|
||||
.eqIfPresent(ProcessStepDO::getStatus, reqVO.getStatus())
|
||||
.eqIfPresent(ProcessStepDO::getType, reqVO.getType())
|
||||
|
||||
+3
@@ -14,6 +14,8 @@ import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.rawgoods.RawGoodsDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
/**
|
||||
* 生产单设计商品表 order_raw_goods_{N} Mapper
|
||||
*
|
||||
@@ -24,6 +26,7 @@ public interface RawGoodsMapper extends BaseMapperX<RawGoodsDO> {
|
||||
|
||||
default PageResult<RawGoodsDO> selectPage(RawGoodsPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<RawGoodsDO>()
|
||||
.eq(RawGoodsDO::getOrganId,getUserOrganId())
|
||||
.eqIfPresent(RawGoodsDO::getOrderId, reqVO.getOrderId())
|
||||
.eqIfPresent(RawGoodsDO::getRawGoodsId, reqVO.getRawGoodsId())
|
||||
.likeIfPresent(RawGoodsDO::getGoodsName, reqVO.getGoodsName())
|
||||
|
||||
+8
-2
@@ -13,11 +13,14 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
|
||||
@Mapper
|
||||
public interface RemainPlateMapper extends BaseMapperX<RemainPlateDO> {
|
||||
|
||||
default PageResult<RemainPlateDO> selectPage(RemainPlatePageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<RemainPlateDO>()
|
||||
.eq(RemainPlateDO::getOrganId,getUserOrganId())
|
||||
.eqIfPresent(RemainPlateDO::getPlanId, reqVO.getPlanId())
|
||||
.eqIfPresent(RemainPlateDO::getInitPlanId, reqVO.getInitPlanId())
|
||||
.eqIfPresent(RemainPlateDO::getStatus, reqVO.getStatus())
|
||||
@@ -41,11 +44,14 @@ public interface RemainPlateMapper extends BaseMapperX<RemainPlateDO> {
|
||||
|
||||
default List<RemainPlateDO> selectByPlanId(Long planId, Long userOrganId) {
|
||||
return selectList( new LambdaQueryWrapperX<RemainPlateDO>()
|
||||
.eq(RemainPlateDO::getPlanId, planId)
|
||||
.eq(RemainPlateDO::getOrganId, userOrganId));
|
||||
.eq(RemainPlateDO::getOrganId, userOrganId)
|
||||
.eq(RemainPlateDO::getPlanId, planId));
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 批量修改删除状态
|
||||
default int updateOrderDeleted(Collection<Long> ids, Integer deleted, Long organId) {
|
||||
return update(new LambdaUpdateWrapper<RemainPlateDO>()
|
||||
|
||||
+3
@@ -9,6 +9,8 @@ import com.cf.imes.module.executor.service.rawgoods.RawGoodsService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.*;
|
||||
@@ -47,6 +49,7 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
private OrderMapper orderMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean createCorrespondsGoods(List<GoodsSaveReqVO> createReqVOS) {
|
||||
List<Long> longs = new ArrayList<>();
|
||||
// 校验生产单是否存在
|
||||
|
||||
+5
-5
@@ -115,7 +115,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
|
||||
@Override
|
||||
public List<PlateOptimize> getPlateListByPlanId(Long planId) {
|
||||
return planMapper.selectPlateListByPlanId(planId);
|
||||
return planMapper.selectPlateListByPlanId(planId,getUserOrganId());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -324,11 +324,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
// .eq(GoodsDO::getOrderId, orderId)
|
||||
// );
|
||||
|
||||
List<GoodsReqVO> goodsDOS = goodsMapper.selectGoodsList(orderId);
|
||||
List<GoodsReqVO> goodsDOS = goodsMapper.selectGoodsList(orderId,getUserOrganId());
|
||||
|
||||
// PlanDO planDO = planMapper.selectByOrderId(orderId);
|
||||
|
||||
List<PlateDetialRespVO> plateDOS = plateMapper.selectPlateDetialList(orderId);
|
||||
List<PlateDetialRespVO> plateDOS = plateMapper.selectPlateDetialList(orderId,getUserOrganId());
|
||||
|
||||
|
||||
// 造型数据的尺寸长度
|
||||
@@ -376,9 +376,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
||||
|
||||
// List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX<GoodsDO>().in(GoodsDO::getOrderId, orderIds));
|
||||
|
||||
List<GoodsReqVO> goodsDOS = goodsMapper.selectGoodsListByOrderIds(orderIds);
|
||||
List<GoodsReqVO> goodsDOS = goodsMapper.selectGoodsListByOrderIds(orderIds,getUserOrganId());
|
||||
|
||||
List<PlateDetialRespVO> plateDOS = plateMapper.selectPlateDetialListByIds(orderIds);
|
||||
List<PlateDetialRespVO> plateDOS = plateMapper.selectPlateDetialListByIds(orderIds,getUserOrganId());
|
||||
|
||||
// 造型数据的尺寸长度
|
||||
Integer orderModelSize = plateDOS.size();
|
||||
|
||||
+2
-1
@@ -29,6 +29,7 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
@@ -108,7 +109,7 @@ public class OrderPartsServiceImpl implements OrderPartsService {
|
||||
@Override
|
||||
public PageResult<OrderPartsRespVO> getPartsPageByTerms(PlateTermsPageReqVO pageReqVO) {
|
||||
PageDTO<OrderPartsRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
||||
IPage<OrderPartsRespVO> pageRes = orderPartsMapper.selectProductList(page, pageReqVO.getOrderId(), pageReqVO.getRoomId(), pageReqVO.getBodyId());
|
||||
IPage<OrderPartsRespVO> pageRes = orderPartsMapper.selectProductList(page, pageReqVO.getOrderId(), pageReqVO.getRoomId(), pageReqVO.getBodyId(),getUserOrganId());
|
||||
return new PageResult<OrderPartsRespVO>(pageRes.getRecords(), pageRes.getTotal());
|
||||
}
|
||||
|
||||
|
||||
+32
-7
@@ -1,6 +1,7 @@
|
||||
package com.cf.imes.module.executor.service.plan;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@@ -50,6 +51,7 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
@@ -104,6 +106,12 @@ public class PlanServiceImpl implements PlanService {
|
||||
String orderNos = itemList.stream().map(i -> i.getOrderId()).distinct().collect(Collectors.toList()).toString();
|
||||
plan.setOrderNos(orderNos);
|
||||
planMapper.insert(plan);
|
||||
|
||||
// 修改对应的生产单的状态为 生产中
|
||||
List<Long> orderIds = JSON.parseArray(orderNos).toJavaList(Long.class);
|
||||
List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds).stream().map(m -> m.setStatus(3)).collect(Collectors.toList());
|
||||
orderMapper.updateBatch(orderDOS);
|
||||
|
||||
Long planId = plan.getId();
|
||||
/* List<Long> orderIds = createReqVO.getOrderIds();
|
||||
if (CollectionUtil.isNotEmpty(orderIds)) {
|
||||
@@ -119,7 +127,7 @@ public class PlanServiceImpl implements PlanService {
|
||||
//List<Long> plateIds = createReqVO.getPlateIds();
|
||||
|
||||
|
||||
Set<Long> itemIds = plateMapper.selectBatchOrderIdsAndGoodsIds(itemList);
|
||||
Set<Long> itemIds = plateMapper.selectBatchOrderIdsAndGoodsIds(itemList,getUserOrganId());
|
||||
|
||||
if (CollectionUtil.isNotEmpty(itemIds)) {
|
||||
ArrayList<PlanItemDO> planItemDOS = new ArrayList<>();
|
||||
@@ -189,6 +197,12 @@ public class PlanServiceImpl implements PlanService {
|
||||
planMapper.deleteById(id);
|
||||
/*planOrderMapper.delete(new LambdaQueryWrapperX<PlanOrderDO>().eq(PlanOrderDO::getPlanId, id));*/
|
||||
planItemMapper.delete(new LambdaQueryWrapperX<PlanItemDO>().eq(PlanItemDO::getPlanId, id));
|
||||
|
||||
// 修改生产单的状态为待排单
|
||||
List<Long> orderIds = JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class);
|
||||
List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds).stream().map(m -> m.setStatus(2)).collect(Collectors.toList());
|
||||
orderMapper.updateBatch(orderDOS);
|
||||
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@@ -211,8 +225,12 @@ public class PlanServiceImpl implements PlanService {
|
||||
.map(e -> e.getOrderId())
|
||||
.collect(Collectors.toSet());*/
|
||||
PlanRespVO respVO = BeanUtils.toBean(planDO, PlanRespVO.class);
|
||||
List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX<GoodsDO>().in(GoodsDO::getOrderId, orderIds));
|
||||
List<PlateDO> plateDOS = plateMapper.selectList(new LambdaQueryWrapperX<PlateDO>().in(PlateDO::getGoodsId, goodsDOS.stream().map(GoodsDO::getGoodsId).collect(Collectors.toSet())));
|
||||
List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX<GoodsDO>()
|
||||
.eq(GoodsDO::getOrganId,getUserOrganId())
|
||||
.in(GoodsDO::getOrderId, orderIds));
|
||||
List<PlateDO> plateDOS = plateMapper.selectList(new LambdaQueryWrapperX<PlateDO>()
|
||||
.eq(PlateDO::getOrganId,getUserOrganId())
|
||||
.in(PlateDO::getGoodsId, goodsDOS.stream().map(GoodsDO::getGoodsId).collect(Collectors.toSet())));
|
||||
List<PlateInfoVO> plateInfoVOS = goodsDOS.stream().map(e -> PlateInfoVO.builder()
|
||||
.material(e.getMaterial())
|
||||
.width(e.getWidth())
|
||||
@@ -247,7 +265,7 @@ public class PlanServiceImpl implements PlanService {
|
||||
//
|
||||
// List<PlateDO> plateDOS = plateMapper.selectList(new LambdaQueryWrapperX<PlateDO>().in(PlateDO::getGoodsId,longs ));
|
||||
|
||||
List<PlateInfoVO> plateInfoVOS = planItemMapper.selectGoodsList(planIds);
|
||||
List<PlateInfoVO> plateInfoVOS = planItemMapper.selectGoodsList(planIds,getUserOrganId());
|
||||
|
||||
|
||||
PageResult<PlanRespVO> planRespVOPageResult = BeanUtils.toBean(planDOPageResult, PlanRespVO.class);
|
||||
@@ -290,6 +308,8 @@ public class PlanServiceImpl implements PlanService {
|
||||
|
||||
QueryWrapperX<OrderDO> queryWrapperX = new QueryWrapperX<>();
|
||||
queryWrapperX
|
||||
.eq("a.organ_id",getUserOrganId())
|
||||
.eq("a.status",2)
|
||||
.eqIfPresent("a.id", pageReqVO.getOrderId())
|
||||
.isNull("opi.item_id")
|
||||
.eqIfPresent("a.customer", pageReqVO.getConsignee())
|
||||
@@ -321,7 +341,7 @@ public class PlanServiceImpl implements PlanService {
|
||||
List<OrderRespVOCopy> records = orderRespVOCopies.getRecords();
|
||||
for (OrderRespVOCopy orderRespVOCopy : records) {
|
||||
|
||||
List<PlatePage> platePages = plateMapper.selectPlatePage(orderRespVOCopy.getOrderId()/*, orderRespVOCopy.getGoodsId()*/);
|
||||
List<PlatePage> platePages = plateMapper.selectPlatePage(orderRespVOCopy.getOrderId(),getUserOrganId()/*, orderRespVOCopy.getGoodsId()*/);
|
||||
orderRespVOCopy.setPlatePages(platePages);
|
||||
|
||||
}
|
||||
@@ -345,7 +365,7 @@ public class PlanServiceImpl implements PlanService {
|
||||
@Override
|
||||
public List<PlatePage> getNotPlanPlateListPage(PlateReqPageVO pageVO) {
|
||||
// PageDTO<PlatePage> page = new PageDTO<>(pageVO.getPageNo(), pageVO.getPageSize());
|
||||
List<PlatePage> pageRes = plateMapper.selectPlatePage(/*page, */pageVO.getOrderId()/*, pageVO.getGoodsId()*/);
|
||||
List<PlatePage> pageRes = plateMapper.selectPlatePage(/*page, */pageVO.getOrderId(),getUserOrganId()/*, pageVO.getGoodsId()*/);
|
||||
return pageRes;
|
||||
}
|
||||
|
||||
@@ -382,7 +402,9 @@ public class PlanServiceImpl implements PlanService {
|
||||
if (planDO.getStatus().equals(PlanStatusEnum.NEWORDER.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.BOARDHASBEENAPPLIEDFOR.getStatus())) {
|
||||
throw exception(PLAN_NOT_ALLOW_CANCEL);
|
||||
}
|
||||
Set<Long> itemIds = planItemMapper.selectList(new LambdaQueryWrapperX<PlanItemDO>().eq(PlanItemDO::getPlanId, id))
|
||||
Set<Long> itemIds = planItemMapper.selectList(new LambdaQueryWrapperX<PlanItemDO>()
|
||||
.eq(PlanItemDO::getOrganId,getUserOrganId())
|
||||
.eq(PlanItemDO::getPlanId, id))
|
||||
.stream().map(PlanItemDO::getItemId)
|
||||
.collect(Collectors.toSet());
|
||||
plateMapper.update(new LambdaUpdateWrapper<PlateDO>().in(PlateDO::getId, itemIds).set(PlateDO::getIsCancel, Boolean.TRUE));
|
||||
@@ -405,6 +427,7 @@ public class PlanServiceImpl implements PlanService {
|
||||
}
|
||||
|
||||
queryWrapperX.eq("p.plan_id", vo.getPlanId())
|
||||
.eq("a.organ_id",getUserOrganId())
|
||||
.eqIfPresent("a.is_door", vo.getIsDoor())
|
||||
.eqIfPresent("a.is_special_shaped", vo.getSpecialShaped())
|
||||
.eqIfPresent("a.is_sculpt", vo.getSculpt())
|
||||
@@ -431,6 +454,7 @@ public class PlanServiceImpl implements PlanService {
|
||||
MPJLambdaWrapperX<OrderDO> lambdaWrapperX = new MPJLambdaWrapperX<>();
|
||||
lambdaWrapperX.leftJoin(OrderItemDO.class, OrderItemDO::getOrderId, OrderDO::getId)
|
||||
.leftJoin(PlanItemDO.class, PlanItemDO::getItemId, OrderItemDO::getId)
|
||||
.eq(PlanItemDO::getOrganId,getUserOrganId())
|
||||
.eq(PlanItemDO::getPlanId, pageReqVO.getPlanId());
|
||||
|
||||
PageResult<OrderDO> pageResult = orderMapper.selectJoinPage(pageReqVO, OrderDO.class, lambdaWrapperX);
|
||||
@@ -447,6 +471,7 @@ public class PlanServiceImpl implements PlanService {
|
||||
.selectSum(PlateDO::getArea, "area")
|
||||
.selectCount(PlateDO::getId, "num")
|
||||
.isNotNull(PlanItemDO::getId)
|
||||
.eq(GoodsDO::getOrganId,getUserOrganId())
|
||||
.eq(GoodsDO::getOrderId, pageVO.getOrderId())
|
||||
.groupBy(GoodsDO::getId)
|
||||
);
|
||||
|
||||
+6
-5
@@ -53,6 +53,7 @@ import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
|
||||
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
import static com.cf.imes.module.executor.service.optimizeplan.OptimizePlanService.ORDER_PLATE_MODEL;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.PLATE_NOT_EXISTS;
|
||||
|
||||
@@ -117,14 +118,14 @@ public class PlateServiceImpl implements PlateService {
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
|
||||
// 查询生产单下的大板,余料板,排单状态的信息
|
||||
PlateDetailRespVO plateDetailRespVO = orderItemMapper.selectPlateNumList(reqVO.getOrderId());
|
||||
PlateDetailRespVO plateDetailRespVO = orderItemMapper.selectPlateNumList(reqVO.getOrderId(),getUserOrganId());
|
||||
// PlateDetailRespVO plateDetailRespVO = plateMapper.selectPlateNumList(reqVO);
|
||||
plateDetailRespVO.setCompanyId(loginUser.getId());
|
||||
|
||||
// PlateRespVO plateRespVO = BeanUtil.toBean(plateDetailRespVO, PlateRespVO.class);
|
||||
|
||||
// 查询生产单下的板材详细信息
|
||||
List<PlateRespVO> plateRespVOS = orderItemMapper.selectPlateList(reqVO);
|
||||
List<PlateRespVO> plateRespVOS = orderItemMapper.selectPlateList(reqVO,getUserOrganId());
|
||||
|
||||
// List<PlateRespVO> plateRespVOS2 = plateRespVOS
|
||||
// .stream()
|
||||
@@ -171,6 +172,7 @@ public class PlateServiceImpl implements PlateService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deletePlates(Set<Long> ids) {
|
||||
plateMapper.deleteBatchIds(ids);
|
||||
}
|
||||
@@ -184,7 +186,7 @@ public class PlateServiceImpl implements PlateService {
|
||||
@Override
|
||||
public PageResult<PlateRespVO> getPlatePageByTerms(PlateTermsPageReqVO pageReqVO) {
|
||||
PageDTO<PlateRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
||||
IPage<PlateRespVO> pageRes = plateMapper.selectProductList(page, pageReqVO.getOrderId(), pageReqVO.getRoomId(), pageReqVO.getBodyId());
|
||||
IPage<PlateRespVO> pageRes = plateMapper.selectProductList(page, pageReqVO.getOrderId(), pageReqVO.getRoomId(), pageReqVO.getBodyId(),getUserOrganId());
|
||||
return new PageResult<PlateRespVO>(pageRes.getRecords(), pageRes.getTotal());
|
||||
}
|
||||
|
||||
@@ -210,6 +212,7 @@ public class PlateServiceImpl implements PlateService {
|
||||
List<BodyPlateIdDTO> list = plateMapper.selectJoinList(BodyPlateIdDTO.class, new MPJLambdaWrapperX<PlateDO>()
|
||||
.selectAs(PlateDO::getId, "plateId")
|
||||
.leftJoin(OrderItemDO.class, OrderItemDO::getPlateId, PlateDO::getId)
|
||||
.eq(OrderItemDO::getOrganId,getUserOrganId())
|
||||
.in(OrderItemDO::getBodyId, bodyIds)
|
||||
.select(OrderItemDO::getBodyId)
|
||||
);
|
||||
@@ -223,9 +226,7 @@ public class PlateServiceImpl implements PlateService {
|
||||
List<List<List<Object>>> data = new ArrayList<>();
|
||||
map.entrySet().forEach(e->{
|
||||
bodyPlateDetailVOS.add(BodyPlateDetailVO.builder()
|
||||
// 将造型的数据转换成 抽取后的数据结构
|
||||
.orderModelList(e.getValue())
|
||||
// .orderModelList(e.getValue())
|
||||
.bodyId(e.getKey())
|
||||
.build()
|
||||
);
|
||||
|
||||
+8
-2
@@ -1,6 +1,7 @@
|
||||
package com.cf.imes.module.executor.service.process;
|
||||
|
||||
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
|
||||
import com.cf.imes.framework.common.enums.ProcessProcessingTypeEnum;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO;
|
||||
import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO;
|
||||
@@ -35,6 +36,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
@@ -104,7 +106,9 @@ public class OrderProcessServiceImpl implements OrderProcessService {
|
||||
.setStatus(false).setProcessinfoId(processRespDTO.getId()).setOrderProcessId(orderProcess.getId()).setFinishTime(null).setSort(INDEX++);// 计划日期没有填写
|
||||
processStepDOS.add(processStepDO);
|
||||
// 生产单中是否存在加工组,若存在加工组,需要逐条加工组信息写入到生产单工序步骤表
|
||||
|
||||
if (processRespDTO.getType() == ProcessTypeEnum.TYPE_SEVEN.getStatus()) {
|
||||
|
||||
List<OrderGroupDO> orderGroupDOS = orderGroupMapper.getOrderGroupByOrderId(createReqVO.getOrderId(), SecurityFrameworkUtils.getLoginUser().getOrganId());
|
||||
if (orderGroupDOS.size() != 0) { // 有加工组
|
||||
for (int i = 0; i < orderGroupDOS.size(); i++) {
|
||||
@@ -148,6 +152,7 @@ public class OrderProcessServiceImpl implements OrderProcessService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateOrderProcess(OrderProcessSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateOrderProcessExists(updateReqVO.getId());
|
||||
@@ -157,6 +162,7 @@ public class OrderProcessServiceImpl implements OrderProcessService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteOrderProcess(Long id) {
|
||||
// 校验存在
|
||||
validateOrderProcessExists(id);
|
||||
@@ -177,12 +183,12 @@ public class OrderProcessServiceImpl implements OrderProcessService {
|
||||
|
||||
@Override
|
||||
public OrderProcessDO getOrderProcess(Long orderId) {
|
||||
return orderProcessMapper.selectOne("order_id", orderId);
|
||||
return orderProcessMapper.selectOne("order_id", orderId ,"organ_id",getUserOrganId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderProcessDO getOrderProcessByProcessGroupId(Long processGroupId) {
|
||||
return orderProcessMapper.selectOne("group_id", processGroupId);
|
||||
return orderProcessMapper.selectOne("group_id", processGroupId,"organ_id",getUserOrganId());
|
||||
}
|
||||
|
||||
}
|
||||
+3
@@ -30,6 +30,7 @@ public class ProcessStepServiceImpl implements ProcessStepService {
|
||||
private ProcessStepMapper processStepMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createProcessStep(ProcessStepSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
ProcessStepDO processStep = BeanUtils.toBean(createReqVO, ProcessStepDO.class);
|
||||
@@ -39,6 +40,7 @@ public class ProcessStepServiceImpl implements ProcessStepService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateProcessStep(ProcessStepSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateProcessStepExists(updateReqVO.getId());
|
||||
@@ -48,6 +50,7 @@ public class ProcessStepServiceImpl implements ProcessStepService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteProcessStep(Long id) {
|
||||
// 校验存在
|
||||
validateProcessStepExists(id);
|
||||
|
||||
+2
-1
@@ -21,6 +21,7 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.module.executor.dal.mysql.rawgoods.RawGoodsMapper;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.RAW_GOODS_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
@@ -100,6 +101,6 @@ public class RawGoodsServiceImpl implements RawGoodsService {
|
||||
|
||||
@Override
|
||||
public List<RawGoodsDO> getRawGoodsByOrder(Long orderId) {
|
||||
return rawGoodsMapper.selectList(RawGoodsDO::getOrderId, orderId);
|
||||
return rawGoodsMapper.selectList(RawGoodsDO::getOrderId, orderId,RawGoodsDO::getOrganId,getUserOrganId());
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -17,8 +17,8 @@
|
||||
og.*,
|
||||
orp.id as remainId
|
||||
from order_goods og
|
||||
left join order_remain_plate orp on og.id = orp.goods_id
|
||||
where og.order_id = #{orderId}
|
||||
left join order_remain_plate orp on og.id = orp.goods_id and og.organ_id = orp.organ_id
|
||||
where og.order_id = #{orderId} and og.organ_id = #{organId}
|
||||
|
||||
</select>
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
og.*,
|
||||
orp.id as remainId
|
||||
from order_goods og
|
||||
left join order_remain_plate orp on og.id = orp.goods_id
|
||||
where og.order_id in
|
||||
left join order_remain_plate orp on og.id = orp.goods_id and og.organ_id = orp.organ_id
|
||||
where og.organ_id =#{organId} and og.order_id in
|
||||
|
||||
<foreach item="id" collection="orderIds" open="(" separator="," close=")">
|
||||
#{id}
|
||||
|
||||
+5
-5
@@ -4,12 +4,12 @@
|
||||
|
||||
<select id="selectOrderPage" resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy">
|
||||
select a.id as orderId, a.order_date, a.delivery_date, a.customer, a.address, a.custom_order_no as defineId,
|
||||
count(op.id) as num, sum(op.area) as area
|
||||
count(op.id) as num, sum(op.area) as area
|
||||
from `order` a
|
||||
left join order_item oi on a.id = oi.order_id
|
||||
inner join order_plate op on oi.plate_id = op.id
|
||||
inner join order_goods og on op.goods_id = og.id
|
||||
left join order_plan_item opi on oi.id = opi.item_id
|
||||
left join order_item oi on a.id = oi.order_id and a.organ_id = oi.organ_id
|
||||
inner join order_plate op on oi.plate_id = op.id and oi.organ_id = op.organ_id
|
||||
inner join order_goods og on op.goods_id = og.id and op.organ_id = og.organ_id
|
||||
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
|
||||
${ew.customSqlSegment}
|
||||
|
||||
|
||||
|
||||
+31
-31
@@ -70,38 +70,38 @@
|
||||
</resultMap>
|
||||
<select id="selectPlateList"
|
||||
resultMap="PlateListMap"
|
||||
parameterType="com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailReqVO">
|
||||
parameterType="map">
|
||||
|
||||
select distinct
|
||||
op.*,
|
||||
og.color as color,
|
||||
og.material as material,
|
||||
ob.name as bodyName,
|
||||
ob.room_name as roomName,
|
||||
oi.id as itemId,
|
||||
oi.group_id as processGroupId,
|
||||
og.brand as brand,
|
||||
(case
|
||||
when p.texture = '' then '是'
|
||||
else '否' end ) as hasTexture,
|
||||
og.height as bigPlateLength,
|
||||
og.width as bigPlateWidth,
|
||||
og.spec as spec
|
||||
op.*,
|
||||
og.color as color,
|
||||
og.material as material,
|
||||
ob.name as bodyName,
|
||||
ob.room_name as roomName,
|
||||
oi.id as itemId,
|
||||
oi.group_id as processGroupId,
|
||||
og.brand as brand,
|
||||
(case
|
||||
when p.texture = '' then '是'
|
||||
else '否' end ) as hasTexture,
|
||||
og.height as bigPlateLength,
|
||||
og.width as bigPlateWidth,
|
||||
og.spec as spec
|
||||
from order_item oi
|
||||
join order_plate op on oi.plate_id = op.id
|
||||
join order_body ob on oi.body_id = ob.id
|
||||
join order_goods og on op.goods_id = og.id
|
||||
join plate p on og.goods_id = p.id
|
||||
join order_plate op on oi.plate_id = op.id and oi.organ_id = op.organ_id
|
||||
join order_body ob on oi.body_id = ob.id and oi.organ_id = ob.organ_id
|
||||
join order_goods og on op.goods_id = og.id and op.organ_id = og.organ_id
|
||||
join plate p on og.goods_id = p.id and og.organ_id = p.organ_id
|
||||
<where>
|
||||
|
||||
<if test="orderId != null and orderId != ''">
|
||||
AND oi.order_id = #{orderId}
|
||||
oi.organ_id = #{organId}
|
||||
<if test="reqVO.orderId != null and reqVO.orderId != ''">
|
||||
AND oi.order_id = #{reqVO.orderId}
|
||||
</if>
|
||||
<if test="bodyId != null and bodyId != ''">
|
||||
AND oi.body_id = #{bodyId}
|
||||
<if test="reqVO.bodyId != null and reqVO.bodyId != ''">
|
||||
AND oi.body_id = #{reqVO.bodyId}
|
||||
</if>
|
||||
<if test="plateId != null and plateId != ''">
|
||||
AND oi.plate_id = #{plateId}
|
||||
<if test="reqVO.plateId != null and reqVO.plateId != ''">
|
||||
AND oi.plate_id = #{reqVO.plateId}
|
||||
</if>
|
||||
|
||||
</where>
|
||||
@@ -126,11 +126,11 @@
|
||||
op.status as planStatus,
|
||||
sum(orp.count )as remainPlateNum
|
||||
from order_item oi
|
||||
join order_plan_item opi on oi.id = opi.item_id
|
||||
join order_plan op on opi.plan_id = op.id
|
||||
left join order_remain_plate orp on orp.plan_id = op.id
|
||||
join order_goods og on oi.order_id = og.order_id
|
||||
where oi.order_id = #{orderId}
|
||||
join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
|
||||
join order_plan op on opi.plan_id = op.id and opi.organ_id = op.organ_id
|
||||
left join order_remain_plate orp on orp.plan_id = op.id and orp.organ_id = op.organ_id
|
||||
join order_goods og on oi.order_id = og.order_id and oi.organ_id = og.organ_id
|
||||
where oi.organ_id = #{organId} and oi.order_id = #{orderId}
|
||||
group by planStatus;
|
||||
|
||||
</select>
|
||||
|
||||
+2
-2
@@ -7,8 +7,8 @@
|
||||
SELECT a.id, a.goods_id, a.name, a.material, a.type, a.model, a.spec, a.brand, a.factory,
|
||||
a.unit, a.price, a.is_composite, a.remark, b.num
|
||||
FROM order_parts a
|
||||
LEFT JOIN order_item b ON a.id = b.parts_id
|
||||
WHERE b.order_id = #{orderId}
|
||||
LEFT JOIN order_item b ON a.id = b.parts_id and a.organ_id = b.organ_id
|
||||
WHERE b.organ_id =#{organId} and b.order_id = #{orderId}
|
||||
AND (#{roomId} IS NULL OR b.room_id = #{roomId})
|
||||
AND (#{bodyId} IS NULL OR b.body_id = #{bodyId})
|
||||
|
||||
|
||||
+9
-7
@@ -108,14 +108,16 @@
|
||||
</select>
|
||||
|
||||
<select id="selectPlateListByPlanId"
|
||||
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize">
|
||||
select a.goods_id, a.goods_name, a.material, a.color, a.width, a.height, a.thickness, count(b.id) as plateNum, d.*
|
||||
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize"
|
||||
parameterType="java.lang.Long">
|
||||
|
||||
select a.id, a.goods_name, a.material, a.color, a.width, a.height, a.thickness, count(b.id) as plateNum, d.*
|
||||
from order_goods a
|
||||
left join order_plate b on a.goods_id = b.goods_id
|
||||
left join order_item c on c.order_id = b.order_id
|
||||
left join order_remain_plate d on a.goods_id = d.goods_id and d.plan_id = c.plan_id
|
||||
where c.plan_id = #{planId}
|
||||
GROUP BY a.id, d.id
|
||||
left join order_plate b on a.id = b.goods_id and a.organ_id = b.organ_id
|
||||
left join order_item c on c.order_id = b.order_id and c.organ_id = b.organ_id
|
||||
left join order_remain_plate d on a.id = d.goods_id and d.plan_id = c.plan_id and a.organ_id = d.organ_id
|
||||
where c.plan_id = #{planId} and c.organ_id = #{organId}
|
||||
GROUP BY a.id, a.goods_name, a.material, a.color, a.width, a.height, a.thickness,d.id
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
+15
-11
@@ -14,21 +14,25 @@
|
||||
<result property="area" column="area"/>
|
||||
|
||||
</resultMap>
|
||||
<select id="selectGoodsList" resultMap="GoodsListMap">
|
||||
<select id="selectGoodsList" resultMap="GoodsListMap" parameterType="java.lang.Long">
|
||||
|
||||
|
||||
select og.material as material,
|
||||
og.width as width,
|
||||
og.height as height,
|
||||
og.thickness as thickness ,
|
||||
og.color as color,
|
||||
count(oi.plate_id) as plateNum,
|
||||
ROUND(og.height * og.width , 2) as area
|
||||
select distinct
|
||||
og.material as material,
|
||||
og.width as width,
|
||||
og.height as height,
|
||||
og.thickness as thickness ,
|
||||
og.color as color,
|
||||
count(oi.plate_id) as plateNum,
|
||||
ROUND(og.height * og.width , 2) as area
|
||||
|
||||
from order_plan_item opi
|
||||
join order_item oi on opi.item_id = oi.id
|
||||
join order_goods og on oi.order_id = og.order_id
|
||||
join order_item oi on opi.item_id = oi.id and opi.organ_id = oi.organ_id
|
||||
join order_goods og on oi.order_id = og.order_id and oi.organ_id = og.organ_id
|
||||
|
||||
where opi.plan_id in
|
||||
where opi.organ_id = #{organId}
|
||||
and
|
||||
opi.plan_id in
|
||||
<foreach collection="planIds" item="ids" open="(" close=")" separator=",">
|
||||
#{ids}
|
||||
</foreach>
|
||||
|
||||
+24
-23
@@ -10,12 +10,13 @@
|
||||
c.goods_name, c.material, c.color, a.goods_id,oi.num,a.is_special_shaped as specialShaped,a.is_sculpt as profiling
|
||||
|
||||
from order_plate a
|
||||
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id
|
||||
LEFT JOIN `order` b on a.order_id = b.id
|
||||
LEFT JOIN order_goods c on a.goods_id = c.id
|
||||
left join order_plan_item opi on oi.id = opi.item_id
|
||||
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id and a.organ_id = oi.organ_id
|
||||
LEFT JOIN `order` b on a.order_id = b.id and a.organ_id = b.organ_id
|
||||
LEFT JOIN order_goods c on a.goods_id = c.id and a.organ_id = c.organ_id
|
||||
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
|
||||
<where>
|
||||
a.is_cancel = 0
|
||||
a.organ_id = #{organId}
|
||||
and a.is_cancel = 0
|
||||
and opi.item_id is null
|
||||
<if test="orderId !=null">
|
||||
and a.order_id = #{orderId}
|
||||
@@ -30,9 +31,9 @@
|
||||
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList">
|
||||
select a.order_id, a.plate_no , a.name as plateName,a.is_special_shaped,a.is_sculpt, e.material, e.color, e.width, e.height, e.thickness, b.room_id, b.body_id
|
||||
from order_plate a
|
||||
LEFT JOIN order_item b ON a.id = b.plate_id AND a.order_id = b.order_id
|
||||
LEFT JOIN order_goods e ON e.id = a.goods_id AND e.order_id = a.order_id
|
||||
LEFT JOIN order_plan_item p ON b.id = p.item_id
|
||||
LEFT JOIN order_item b ON a.id = b.plate_id AND a.order_id = b.order_id and a.organ_id = b.organ_id
|
||||
LEFT JOIN order_goods e ON e.id = a.goods_id AND e.order_id = a.order_id and e.organ_id = a.organ_id
|
||||
LEFT JOIN order_plan_item p ON b.id = p.item_id and b.organ_id = p.organ_id
|
||||
${ew.customSqlSegment}
|
||||
|
||||
|
||||
@@ -53,9 +54,9 @@
|
||||
a.seal_up, a.seal_down, a.texture, a.hole_face, a.hole_arrange, a.unregular_point_count, a.front_hole_count, a.back_hole_count,
|
||||
a.side_hole_count, a.front_model_count, a.back_model_count, a.remark, c.material, c.color
|
||||
FROM order_plate a
|
||||
LEFT JOIN order_goods c ON a.goods_id = c.goods_id AND a.order_id = c.order_id
|
||||
LEFT JOIN order_item b ON a.id = b.plate_id
|
||||
WHERE b.order_id = #{orderId}
|
||||
LEFT JOIN order_goods c ON a.goods_id = c.id AND a.order_id = c.order_id and a.organ_id = c.organ_id
|
||||
LEFT JOIN order_item b ON a.id = b.plate_id and a.organ_id = b.organ_id
|
||||
WHERE b.organ_id = #{organId} and b.order_id = #{orderId}
|
||||
AND (#{roomId} IS NULL OR b.room_id = #{roomId})
|
||||
AND (#{bodyId} IS NULL OR b.body_id = #{bodyId})
|
||||
GROUP BY a.id, c.material, c.color;
|
||||
@@ -63,8 +64,8 @@
|
||||
|
||||
<select id="selectBatchOrderIdsAndGoodsIds" resultType="java.lang.Long">
|
||||
select oi.id from order_plate op
|
||||
join order_item oi on op.id = oi.plate_id and op.order_id = oi.order_id
|
||||
where op.order_id in
|
||||
join order_item oi on op.id = oi.plate_id and op.order_id = oi.order_id and op.organ_id = oi.organ_id
|
||||
where op.organ_id = #{organId} and op.order_id in
|
||||
<foreach collection="itemList" item="item" open="(" close=")" separator=",">
|
||||
(#{item.orderId})
|
||||
</foreach>
|
||||
@@ -141,11 +142,11 @@
|
||||
og.name as processGroupName,
|
||||
CASE WHEN op.unregular_point_count = 0 and op.front_hole_count = 0 and op.back_hole_count = 0 and op.side_hole_count = 0 THEN false ELSE true END AS hasHole
|
||||
from order_plate op
|
||||
left join order_goods ogs on op.goods_id = ogs.id
|
||||
join order_item oi on op.id = oi.plate_id
|
||||
join order_body ob on oi.body_id = ob.id
|
||||
left join order_group og on oi.group_id = og.id
|
||||
where op.order_id = #{orderId}
|
||||
left join order_goods ogs on op.goods_id = ogs.id and op.organ_id = ogs.organ_id
|
||||
join order_item oi on op.id = oi.plate_id and op.organ_id = oi.organ_id
|
||||
join order_body ob on oi.body_id = ob.id and oi.organ_id = ob.organ_id
|
||||
left join order_group og on oi.group_id = og.id and oi.organ_id = og.organ_id
|
||||
where op.order_id =#{orderId} and op.organ_id = #{organId}
|
||||
|
||||
</select>
|
||||
|
||||
@@ -162,12 +163,12 @@
|
||||
og.name as processGroupName,
|
||||
CASE WHEN op.unregular_point_count = 0 and op.front_hole_count = 0 and op.back_hole_count = 0 and op.side_hole_count = 0 THEN false ELSE true END AS hasHole
|
||||
from order_plate op
|
||||
left join order_goods ogs on op.goods_id = ogs.id
|
||||
join order_item oi on op.id = oi.plate_id
|
||||
join order_body ob on oi.body_id = ob.id
|
||||
left join order_group og on oi.group_id = og.id
|
||||
left join order_goods ogs on op.goods_id = ogs.id and op.organ_id = ogs.organ_id
|
||||
join order_item oi on op.id = oi.plate_id and op.organ_id = oi.organ_id
|
||||
join order_body ob on oi.body_id = ob.id and oi.organ_id = ob.organ_id
|
||||
left join order_group og on oi.group_id = og.id = oi.organ_id = og.organ_id
|
||||
|
||||
where op.order_id in
|
||||
where op.organ_id = #{organId} and op.order_id in
|
||||
|
||||
<foreach collection="orderIds" item="orderIds" open="(" close=")" separator=",">
|
||||
|
||||
|
||||
-14
@@ -7,11 +7,9 @@ import com.cf.imes.module.manage.controller.admin.process.vo.*;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderModuleVO;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderPlateRespVO;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.PlatePageVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.ProcessDO;
|
||||
import com.cf.imes.module.manage.service.process.ProductionProcessService;
|
||||
import com.cf.imes.module.manage.service.query.ProductionStatusService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -39,18 +37,6 @@ public class ProductionProcessController {
|
||||
|
||||
|
||||
|
||||
@GetMapping("/select")
|
||||
@Operation(summary = "查看当前登录用户的组织的工序信息")
|
||||
@Parameter(name = "userId", description = "当前登录的用户ID", required = true, example = "1")
|
||||
@PreAuthorize("@ss.hasPermission('manage:process:select')")
|
||||
public CommonResult<List<ProcessDO>> getUserPage(@Valid @RequestParam("userId") Long userId) {
|
||||
|
||||
return success(productionProcessService.getProcess(userId));
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "查看生产工序分页")
|
||||
|
||||
-77
@@ -1,77 +0,0 @@
|
||||
package com.cf.imes.module.manage.dal.dataobject.process;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
|
||||
import lombok.*;
|
||||
|
||||
@TableName("imes_base.process")
|
||||
@KeySequence("process_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ProcessDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 工序 ID
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 工序名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 计件工资
|
||||
*/
|
||||
private Double pieceRate;
|
||||
/**
|
||||
* 计件类型:1 数量 2 长度 3 平方 4 宽 5 高 6 体积 7 生产单金额百分比
|
||||
*/
|
||||
private Integer pieceType;
|
||||
/**
|
||||
* 工序类型:0 全部加工 1 开料 2 部件加工 3 异形封边 4 分堆 5 打包 6 出库 7 组件加工 8 板材
|
||||
*/
|
||||
private Integer type;
|
||||
/**
|
||||
* 是否推送终端客户:0 否 1 是
|
||||
*/
|
||||
private Boolean isCustom;
|
||||
/**
|
||||
* 是否推送经销商:0 否 1 是
|
||||
*/
|
||||
private Boolean isDealer;
|
||||
/**
|
||||
* 排序优先级
|
||||
*/
|
||||
private Short sort;
|
||||
/**
|
||||
* 小时产量
|
||||
*/
|
||||
private Double hourCapacity;
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
private String unit;
|
||||
/**
|
||||
* 是否启用:0 否 1 是
|
||||
*/
|
||||
private Boolean isEnabled;
|
||||
/**
|
||||
* 准备时间
|
||||
*/
|
||||
private Double prepareTime;
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* 组织id
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Long organId;
|
||||
}
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
package com.cf.imes.module.manage.dal.dataobject.process;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.*;
|
||||
|
||||
@TableName("imes_base.process_user")
|
||||
@Data
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ProcessUserDO {
|
||||
|
||||
/**
|
||||
* 工序 ID
|
||||
*/
|
||||
@TableId
|
||||
private Long organId;
|
||||
|
||||
/**
|
||||
* 工序ID
|
||||
*/
|
||||
private Long processId;
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
|
||||
}
|
||||
-36
@@ -1,36 +0,0 @@
|
||||
package com.cf.imes.module.manage.dal.mysql.process;
|
||||
|
||||
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
|
||||
import com.cf.imes.module.manage.controller.admin.process.vo.UserProcessRespVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.ProcessDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.ProcessUserDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 生产单工序表 order_process_{N} Mapper
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
@Mapper
|
||||
public interface ProcessMapper extends BaseMapperX<ProcessDO> {
|
||||
|
||||
|
||||
default List<ProcessDO> selectProcessList(Long organId,Long userId) {
|
||||
return selectJoinList(ProcessDO.class, new MPJLambdaWrapperX<ProcessDO>()
|
||||
.leftJoin(ProcessUserDO.class, ProcessUserDO::getProcessId, ProcessDO::getId)
|
||||
.eq(ProcessUserDO::getUserId, userId)
|
||||
.eq(ProcessDO::getOrganId, organId)
|
||||
.eq(ProcessDO::getIsEnabled,true)
|
||||
.selectAll(ProcessDO.class)
|
||||
.orderByDesc(ProcessDO::getId));
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
package com.cf.imes.module.manage.dal.mysql.process;
|
||||
|
||||
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.ProcessUserDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface ProcessUserMapper extends BaseMapperX<ProcessUserDO> {
|
||||
|
||||
|
||||
}
|
||||
+8
@@ -37,6 +37,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
import static com.cf.imes.module.manage.util.search.SearchUtil.insertSeparator;
|
||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
|
||||
|
||||
@Service
|
||||
@@ -64,11 +65,18 @@ public class PackServiceImpl implements PackService {
|
||||
@Override
|
||||
public PageResult<PackRespVO> getPackPage(PackPageReqVO pageReqVO) {
|
||||
|
||||
pageReqVO.setCustomer(insertSeparator(pageReqVO.getCustomer()));
|
||||
pageReqVO.setCustomOrderNo(insertSeparator(pageReqVO.getCustomOrderNo()));
|
||||
pageReqVO.setAddress(insertSeparator(pageReqVO.getAddress()));
|
||||
|
||||
PageDTO<PackRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
||||
|
||||
// 根据生产状态查询生产单号
|
||||
List<Long> collect = productionStatusMapper.selectPackPage(pageReqVO,getUserOrganId()).stream().map(OrderDO::getId).collect(Collectors.toList());
|
||||
|
||||
if(collect.isEmpty()){
|
||||
return null;
|
||||
}
|
||||
|
||||
// 查询打包首页分页数据信息,包裹数,板件数量信息
|
||||
IPage<PackRespVO> packRespVOS = productionStatusMapper.selectOrderPlate(page,collect,getUserOrganId());
|
||||
|
||||
-3
@@ -4,15 +4,12 @@ package com.cf.imes.module.manage.service.process;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.module.manage.controller.admin.process.vo.*;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderModuleVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.ProcessDO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ProductionProcessService {
|
||||
|
||||
|
||||
// 查看组织的工序信息
|
||||
List<ProcessDO> getProcess(Long userId);
|
||||
|
||||
|
||||
// 生产工序单分页查询
|
||||
|
||||
+10
-28
@@ -1,50 +1,34 @@
|
||||
package com.cf.imes.module.manage.service.process;
|
||||
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||
import com.cf.imes.framework.common.enums.ProcessProcessingTypeEnum;
|
||||
import com.cf.imes.framework.common.enums.ProcessingStatusEnum;
|
||||
import com.cf.imes.framework.common.exception.ServiceException;
|
||||
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
|
||||
import com.cf.imes.module.manage.config.VocieParameters;
|
||||
import com.cf.imes.module.manage.controller.admin.pack.vo.PackRespVO;
|
||||
import com.cf.imes.module.manage.controller.admin.process.vo.*;
|
||||
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderModuleVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.pack.OrderBodyDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepItemNDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepNDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.process.ProcessDO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.query.OrderItemDO;
|
||||
import com.cf.imes.module.manage.dal.mysql.pack.OrderBodyMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.plate.OrderPlateMapper;
|
||||
import com.cf.imes.module.manage.dal.mysql.process.*;
|
||||
import com.cf.imes.module.manage.dal.mysql.query.OrderItemMapper;
|
||||
import com.cf.imes.module.manage.util.page.PageHelperUtil;
|
||||
import com.cf.imes.module.system.enums.ErrorCodeConstants;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.security.core.parameters.P;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.baomidou.mybatisplus.core.toolkit.Wrappers.update;
|
||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||
import static com.cf.imes.module.manage.util.search.SearchUtil.insertSeparator;
|
||||
|
||||
|
||||
/**
|
||||
@@ -65,8 +49,7 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
|
||||
@Resource
|
||||
private ProcessStepItemMapper processStepItemMapper;
|
||||
|
||||
@Resource
|
||||
private ProcessMapper processMapper;
|
||||
|
||||
|
||||
|
||||
@Resource
|
||||
@@ -81,15 +64,6 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
|
||||
|
||||
|
||||
|
||||
// 查看组织的工序信息
|
||||
@Override
|
||||
public List<ProcessDO> getProcess(Long userId) {
|
||||
|
||||
// 获取组织id
|
||||
Long organId = OrganContextHolder.getOrganId();
|
||||
return processMapper.selectProcessList(organId,userId);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -97,6 +71,11 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
|
||||
@Override
|
||||
public PageResult<ProcessRespVO> getProcessPage(ProcessPageReqVO pageReqVO) {
|
||||
|
||||
|
||||
pageReqVO.setCustomer(insertSeparator(pageReqVO.getCustomer()));
|
||||
pageReqVO.setCustomOrderNo(insertSeparator(pageReqVO.getCustomOrderNo()));
|
||||
pageReqVO.setAddress(insertSeparator(pageReqVO.getAddress()));
|
||||
|
||||
PageDTO<ProcessRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
|
||||
|
||||
IPage<ProcessRespVO> processRespVOS = processStepMapper.selectOrder(page,pageReqVO,getUserOrganId());
|
||||
@@ -120,6 +99,9 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 修改工序明细表的工序状态
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package com.cf.imes.module.manage.util.search;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 模糊搜索 工具类
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
public class SearchUtil {
|
||||
|
||||
/**
|
||||
* 拼接需要模糊搜索的字符串
|
||||
*
|
||||
*
|
||||
*/
|
||||
public static String insertSeparator(String input) {
|
||||
// 如果输入字符串为空,直接返回空字符串
|
||||
if (input == null || input.isEmpty()) {
|
||||
return input;
|
||||
}
|
||||
|
||||
// 使用StringBuilder进行字符串拼接
|
||||
StringBuilder result = new StringBuilder();
|
||||
|
||||
// 遍历输入字符串的每个字符
|
||||
for (int i = 0; i < input.length(); i++) {
|
||||
result.append(input.charAt(i));
|
||||
// 如果不是最后一个字符,添加分隔符
|
||||
if (i < input.length() - 1) {
|
||||
result.append("%");
|
||||
}
|
||||
}
|
||||
|
||||
// 返回拼接后的字符串
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
+4
-4
@@ -60,10 +60,10 @@
|
||||
and opsi.status = #{pageReqVO.processStatus}
|
||||
</if>
|
||||
<if test="pageReqVO.orderId != null">
|
||||
and o.id = #{pageReqVO.orderId}
|
||||
and ops.order_id = #{pageReqVO.orderId}
|
||||
</if>
|
||||
<if test="pageReqVO.customOrderNo != null">
|
||||
and o.custom_order_no = #{pageReqVO.customOrderNo}
|
||||
and o.custom_order_no like concat('%', #{pageReqVO.customOrderNo},'%')
|
||||
</if>
|
||||
<if test="pageReqVO.customer != null">
|
||||
and o.customer like concat('%',#{pageReqVO.customer},'%')
|
||||
@@ -153,11 +153,11 @@
|
||||
ops.status as status,
|
||||
ops.manager as manager,
|
||||
ops.finish_time as processDate,
|
||||
opsi.group_name as groupName,
|
||||
op.name as groupName,
|
||||
ops.sort
|
||||
|
||||
from order_process_step ops
|
||||
join order_process_step_item opsi on ops.id = opsi.process_step_id and ops.organ_id = opsi.organ_id
|
||||
join order_process op on ops.order_process_id = op.id and ops.organ_id = op.organ_id
|
||||
where ops.order_id = #{orderNo} and ops.organ_id = #{organId}
|
||||
order by ops.sort ;
|
||||
|
||||
|
||||
+18
@@ -114,4 +114,22 @@ public class ProcessController {
|
||||
BeanUtils.toBean(list, ProcessRespVO.class));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@GetMapping("/select")
|
||||
@Operation(summary = "查看当前登录用户的组织的工序信息")
|
||||
@Parameter(name = "userId", description = "当前登录的用户ID", required = true, example = "1")
|
||||
@PreAuthorize("@ss.hasPermission('manage:process:select')")
|
||||
public CommonResult<List<ProcessDO>> getUserPage(@Valid @RequestParam("userId") Long userId) {
|
||||
|
||||
return success(processService.getUserProcess(userId));
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
+3
-5
@@ -1,7 +1,7 @@
|
||||
package com.cf.imes.module.system.dal.mysql.permission;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.security.core.LoginUser;
|
||||
@@ -12,9 +12,7 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@Mapper
|
||||
public interface RoleMapper extends BaseMapperX<RoleDO> {
|
||||
@@ -28,7 +26,7 @@ public interface RoleMapper extends BaseMapperX<RoleDO> {
|
||||
//如果是超级管理员并且未传organId,就查看自己的的
|
||||
lambdaQueryWrapperX.inIfPresent(RoleDO::getOrganId,0L,loginUser.getOrganId());
|
||||
}*/
|
||||
if(isSupAdmin && !Objects.isNull(reqVO.getOrganId())) {
|
||||
if(isSupAdmin && ObjectUtil.isNotNull(reqVO.getOrganId())) {
|
||||
//如果是超级管理员并且传入organId,就查看传入的组织
|
||||
lambdaQueryWrapperX.eqIfPresent(RoleDO::getOrganId, reqVO.getOrganId());
|
||||
} else {
|
||||
@@ -41,7 +39,7 @@ public interface RoleMapper extends BaseMapperX<RoleDO> {
|
||||
.eqIfPresent(RoleDO::getStatus, reqVO.getStatus())
|
||||
.betweenIfPresent(RoleDO::getCreateTime, reqVO.getCreateTime())
|
||||
.ne(RoleDO::getId, 1)
|
||||
.orderByDesc(RoleDO::getId);
|
||||
.orderByAsc(RoleDO::getSort);
|
||||
|
||||
return selectPage(reqVO, lambdaQueryWrapperX);
|
||||
}
|
||||
|
||||
+14
@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
|
||||
import com.cf.imes.module.system.controller.admin.process.vo.process.ProcessPageReqVO;
|
||||
import com.cf.imes.module.system.dal.dataobject.process.ProcessDO;
|
||||
import com.cf.imes.module.system.dal.dataobject.process.ProcessUserDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@@ -50,4 +52,16 @@ public interface ProcessMapper extends BaseMapperX<ProcessDO> {
|
||||
}
|
||||
|
||||
int deleteById(@Param("id") Long id);
|
||||
|
||||
default List<ProcessDO> selectProcessList(Long organId,Long userId) {
|
||||
return selectJoinList(ProcessDO.class, new MPJLambdaWrapperX<ProcessDO>()
|
||||
.leftJoin(ProcessUserDO.class, ProcessUserDO::getProcessId, ProcessDO::getId)
|
||||
.eq(ProcessUserDO::getUserId, userId)
|
||||
.eq(ProcessDO::getOrganId, organId)
|
||||
.eq(ProcessDO::getIsEnabled,true)
|
||||
.selectAll(ProcessDO.class)
|
||||
.orderByDesc(ProcessDO::getId));
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package com.cf.imes.module.system.dal.redis;
|
||||
|
||||
/**
|
||||
* system redis监听刷新通道名称 常量
|
||||
*
|
||||
* @author Gqr
|
||||
* @since 2024/6/13 14:55
|
||||
*/
|
||||
public interface RedisRefreshChannelTopicConstants {
|
||||
|
||||
/**
|
||||
* 刷新权限
|
||||
*/
|
||||
String PREMISSION_REFRESH = "PREMISSION_REFRESH";
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.cf.imes.module.system.dal.redis.listener;
|
||||
|
||||
import com.cf.imes.framework.mq.redis.core.pubsub.AbstractRedisSimpleMessageListener;
|
||||
import com.cf.imes.framework.security.core.service.SecurityFrameworkService;
|
||||
import com.cf.imes.module.system.dal.redis.RedisRefreshChannelTopicConstants;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.connection.Message;
|
||||
import org.springframework.data.redis.listener.ChannelTopic;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* system PREMISSION_REFRESH redis监听器
|
||||
*
|
||||
* @author Gqr
|
||||
* @since 2024/6/13 10:32
|
||||
*/
|
||||
@Component
|
||||
public class SystemPremissionRefreshRedisListener extends AbstractRedisSimpleMessageListener {
|
||||
|
||||
@Autowired
|
||||
private SecurityFrameworkService securityFrameworkService;
|
||||
|
||||
public SystemPremissionRefreshRedisListener() {
|
||||
super.setTopic(new ChannelTopic(RedisRefreshChannelTopicConstants.PREMISSION_REFRESH));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessage(Message message, byte[] bytes) {
|
||||
securityFrameworkService.invalidateAll();
|
||||
}
|
||||
}
|
||||
+50
-32
@@ -51,8 +51,9 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
|
||||
@Transactional
|
||||
public OAuth2AccessTokenDO createAccessToken(Long userId, Integer userType, String clientId, List<String> scopes,Boolean large, Integer dbNo, Integer tableNo, String dataCode, Long organId, String nickname) {
|
||||
OAuth2ClientDO clientDO = oauth2ClientService.validOAuthClientFromCache(clientId);
|
||||
// 创建刷新令牌
|
||||
OAuth2RefreshTokenDO refreshTokenDO = createOAuth2RefreshToken(userId, userType, clientDO, scopes, large, dbNo, tableNo, dataCode, organId, nickname);
|
||||
// 填入访问令牌包含的字段
|
||||
OAuth2AccessTokenDO refreshTokenDO = createOAuth2ReToken(userId, userType, clientDO, scopes, large, dbNo, tableNo, dataCode, organId, nickname);
|
||||
|
||||
// 创建访问令牌
|
||||
return createOAuth2AccessToken(refreshTokenDO, clientDO);
|
||||
}
|
||||
@@ -84,23 +85,33 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
|
||||
throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "刷新令牌已过期");
|
||||
}
|
||||
|
||||
// 创建访问令牌
|
||||
return createOAuth2AccessToken(refreshTokenDO, clientDO);
|
||||
// // 创建访问令牌
|
||||
// return createOAuth2AccessToken(refreshTokenDO, clientDO);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OAuth2AccessTokenDO getAccessToken(String accessToken) {
|
||||
// 优先从 Redis 中获取
|
||||
OAuth2AccessTokenDO accessTokenDO = oauth2AccessTokenRedisDAO.get(accessToken);
|
||||
if (accessTokenDO != null) {
|
||||
return accessTokenDO;
|
||||
}
|
||||
// // 优先从 Redis 中获取
|
||||
// OAuth2AccessTokenDO accessTokenDO = oauth2AccessTokenRedisDAO.get(accessToken);
|
||||
// if (accessTokenDO != null) {
|
||||
// return accessTokenDO;
|
||||
// }
|
||||
//
|
||||
// // 获取不到,从 MySQL 中获取
|
||||
// accessTokenDO = oauth2AccessTokenMapper.selectByAccessToken(accessToken);
|
||||
// // 如果在 MySQL 存在,则往 Redis 中写入
|
||||
// if (accessTokenDO != null && !DateUtils.isExpired(accessTokenDO.getExpiresTime())) {
|
||||
// oauth2AccessTokenRedisDAO.set(accessTokenDO);
|
||||
// }
|
||||
// 因数据库不在存入缓存数据,所以直接从缓存中获取
|
||||
|
||||
// 获取不到,从 MySQL 中获取
|
||||
accessTokenDO = oauth2AccessTokenMapper.selectByAccessToken(accessToken);
|
||||
// 如果在 MySQL 存在,则往 Redis 中写入
|
||||
if (accessTokenDO != null && !DateUtils.isExpired(accessTokenDO.getExpiresTime())) {
|
||||
oauth2AccessTokenRedisDAO.set(accessTokenDO);
|
||||
// 数据库移除令牌存入,所以直接从缓存中获取
|
||||
OAuth2AccessTokenDO accessTokenDO = oauth2AccessTokenRedisDAO.get(accessToken);
|
||||
|
||||
if(accessTokenDO != null){
|
||||
// 有令牌的校验,代表有接口访问,延长令牌的过期时间(30分钟)
|
||||
oauth2AccessTokenRedisDAO.set(accessTokenDO.setExpiresTime(LocalDateTime.now().plusSeconds(1800)));
|
||||
}
|
||||
return accessTokenDO;
|
||||
}
|
||||
@@ -111,9 +122,9 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
|
||||
if (accessTokenDO == null) {
|
||||
throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "访问令牌不存在");
|
||||
}
|
||||
if (DateUtils.isExpired(accessTokenDO.getExpiresTime())) {
|
||||
throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "访问令牌已过期");
|
||||
}
|
||||
// if (DateUtils.isExpired(accessTokenDO.getExpiresTime())) {
|
||||
// throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "访问令牌已过期");
|
||||
// }
|
||||
return accessTokenDO;
|
||||
}
|
||||
|
||||
@@ -136,7 +147,26 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
|
||||
return oauth2AccessTokenMapper.selectPage(reqVO);
|
||||
}
|
||||
|
||||
private OAuth2AccessTokenDO createOAuth2AccessToken(OAuth2RefreshTokenDO refreshTokenDO, OAuth2ClientDO clientDO) {
|
||||
|
||||
// 填入访问令牌包含的字段
|
||||
private OAuth2AccessTokenDO createOAuth2ReToken(Long userId, Integer userType, OAuth2ClientDO clientDO, List<String> scopes, Boolean large, Integer dbNo, Integer tableNo, String dataCode, Long organId, String nickname) {
|
||||
OAuth2AccessTokenDO refreshToken = new OAuth2AccessTokenDO().setRefreshToken(generateRefreshToken())
|
||||
.setUserId(userId).setUserType(userType)
|
||||
.setClientId(clientDO.getClientId()).setScopes(scopes)
|
||||
.setExpiresTime(LocalDateTime.now().plusSeconds(clientDO.getRefreshTokenValiditySeconds()))
|
||||
.setLarge(large).setDbNo(dbNo).setTableNo(tableNo).setDataCode(dataCode)
|
||||
.setOrganId(organId).setNickname(nickname);
|
||||
if (organId != null) {
|
||||
OrganContextHolder.setOrganId(organId);
|
||||
}
|
||||
boolean b = securityFrameworkService.hasAnyRoles(userId,"super_admin");
|
||||
refreshToken.setIsSupAdmin(b);
|
||||
// oauth2RefreshTokenMapper.insert(refreshToken);
|
||||
return refreshToken;
|
||||
}
|
||||
|
||||
// 在Redis中新增Token,除去刷新Token字段
|
||||
private OAuth2AccessTokenDO createOAuth2AccessToken(OAuth2AccessTokenDO refreshTokenDO, OAuth2ClientDO clientDO) {
|
||||
OAuth2AccessTokenDO accessTokenDO = new OAuth2AccessTokenDO().setAccessToken(generateAccessToken())
|
||||
.setUserId(refreshTokenDO.getUserId()).setUserType(refreshTokenDO.getUserType())
|
||||
.setClientId(clientDO.getClientId()).setScopes(refreshTokenDO.getScopes())
|
||||
@@ -147,25 +177,13 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
|
||||
.setNickname(refreshTokenDO.getNickname()).setIsSupAdmin(refreshTokenDO.getIsSupAdmin())
|
||||
;
|
||||
//accessTokenDO.setOrganId(OrganContextHolder.getOrganId()); // 手动设置组织编号,避免缓存到 Redis 的时候,无对应的组织编号
|
||||
oauth2AccessTokenMapper.insert(accessTokenDO);
|
||||
// oauth2AccessTokenMapper.insert(accessTokenDO);
|
||||
// 记录到 Redis 中
|
||||
oauth2AccessTokenRedisDAO.set(accessTokenDO);
|
||||
return accessTokenDO;
|
||||
}
|
||||
|
||||
private OAuth2RefreshTokenDO createOAuth2RefreshToken(Long userId, Integer userType, OAuth2ClientDO clientDO, List<String> scopes, Boolean large, Integer dbNo, Integer tableNo, String dataCode, Long organId, String nickname) {
|
||||
OAuth2RefreshTokenDO refreshToken = new OAuth2RefreshTokenDO().setRefreshToken(generateRefreshToken())
|
||||
.setUserId(userId).setUserType(userType)
|
||||
.setClientId(clientDO.getClientId()).setScopes(scopes)
|
||||
.setExpiresTime(LocalDateTime.now().plusSeconds(clientDO.getRefreshTokenValiditySeconds()))
|
||||
.setLarge(large).setDbNo(dbNo).setTableNo(tableNo).setDataCode(dataCode)
|
||||
.setOrganId(organId).setNickname(nickname)
|
||||
;
|
||||
boolean b = securityFrameworkService.hasAnyRoles(userId,"super_admin");
|
||||
refreshToken.setIsSupAdmin(b);
|
||||
oauth2RefreshTokenMapper.insert(refreshToken);
|
||||
return refreshToken;
|
||||
}
|
||||
|
||||
|
||||
private static String generateAccessToken() {
|
||||
return IdUtil.fastSimpleUUID();
|
||||
|
||||
+17
-2
@@ -4,14 +4,12 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.cf.imes.framework.common.enums.CommonStatusEnum;
|
||||
import com.cf.imes.framework.common.util.collection.CollectionUtils;
|
||||
import com.cf.imes.framework.datapermission.core.annotation.DataPermission;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
|
||||
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
|
||||
import com.cf.imes.framework.organ.core.db.OrganBaseDO;
|
||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.cf.imes.module.system.api.permission.dto.DeptDataPermissionRespDTO;
|
||||
import com.cf.imes.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO;
|
||||
@@ -22,6 +20,7 @@ import com.cf.imes.module.system.dal.dataobject.permission.UserRoleDO;
|
||||
import com.cf.imes.module.system.dal.mysql.permission.RoleMenuMapper;
|
||||
import com.cf.imes.module.system.dal.mysql.permission.UserRoleMapper;
|
||||
import com.cf.imes.module.system.dal.redis.RedisKeyConstants;
|
||||
import com.cf.imes.module.system.dal.redis.RedisRefreshChannelTopicConstants;
|
||||
import com.cf.imes.module.system.enums.permission.DataScopeEnum;
|
||||
import com.cf.imes.module.system.service.dept.DeptService;
|
||||
import com.cf.imes.module.system.service.user.AdminUserService;
|
||||
@@ -30,14 +29,17 @@ import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.Sets;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.cache.annotation.Caching;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -72,6 +74,9 @@ public class PermissionServiceImpl implements PermissionService {
|
||||
@Resource
|
||||
private AdminUserService userService;
|
||||
|
||||
@Autowired
|
||||
private RedisTemplate redisTemplate;
|
||||
|
||||
@Override
|
||||
public boolean hasAnyPermissions(Long userId, String... permissions) {
|
||||
// 如果为空,说明已经有权限
|
||||
@@ -179,6 +184,16 @@ public class PermissionServiceImpl implements PermissionService {
|
||||
if (CollUtil.isNotEmpty(deleteMenuIds)) {
|
||||
roleMenuMapper.deleteListByRoleIdAndMenuIds(roleId, deleteMenuIds);
|
||||
}
|
||||
|
||||
// 角色菜单权限发生修改,通知刷新本地缓存
|
||||
if (CollectionUtil.isNotEmpty(createMenuIds) || CollectionUtil.isNotEmpty(deleteMenuIds)) {
|
||||
CompletableFuture.runAsync(() -> {
|
||||
redisTemplate.convertAndSend(RedisRefreshChannelTopicConstants.PREMISSION_REFRESH, "");
|
||||
}).exceptionally(e -> {
|
||||
log.error("redis message发送失败, topic:{}, 异常:{}", RedisRefreshChannelTopicConstants.PREMISSION_REFRESH, e.getMessage());
|
||||
return null;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
@@ -67,4 +67,5 @@ public interface ProcessService {
|
||||
*/
|
||||
List<ProcessDO> getAllProcess();
|
||||
|
||||
List<ProcessDO> getUserProcess(Long userId);
|
||||
}
|
||||
+9
@@ -189,4 +189,13 @@ public class ProcessServiceImpl implements ProcessService {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<ProcessDO> getUserProcess(Long userId) {
|
||||
|
||||
// 获取组织id
|
||||
Long organId = OrganContextHolder.getOrganId();
|
||||
return processMapper.selectProcessList(organId,userId);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user