生产单管理更新还原、作废等接口

This commit is contained in:
lym
2024-06-14 17:08:07 +08:00
57 changed files with 549 additions and 416 deletions
@@ -9,9 +9,9 @@ import lombok.Getter;
public enum ProcessProcessingTypeEnum { public enum ProcessProcessingTypeEnum {
COMPONENTPROCESSING(7L,"组件加工"); COMPONENTPROCESSING(7,"组件加工");
private Long number; private Integer number;
private String fabricatedItem; private String fabricatedItem;
public boolean equals(Integer number) { public boolean equals(Integer number) {
@@ -17,13 +17,21 @@ import java.util.concurrent.Executors;
public class CacheUtils { public class CacheUtils {
public static <K, V> LoadingCache<K, V> buildAsyncReloadingCache(Duration duration, CacheLoader<K, V> loader) { 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() return CacheBuilder.newBuilder()
// 只阻塞当前数据加载线程,其他线程返回旧值 // 只阻塞当前数据加载线程,其他线程返回旧值
.refreshAfterWrite(duration) .refreshAfterWrite(duration)
// 通过 asyncReloading 实现全异步加载,包括 refreshAfterWrite 被阻塞的加载线程 // 通过 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);
}
} }
@@ -21,6 +21,11 @@ public class OrganContextHolder {
*/ */
private static final ThreadLocal<Boolean> IGNORE = new TransmittableThreadLocal<>(); 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() { public static Long getRequiredOrganId() {
Long organId = getOrganId(); Long organId = getOrganId();
if (organId == null) { if (organId == null) {
throw new NullPointerException("OrganContextHolder 不存在组织编号!可参考文档:" throw new NullPointerException(ORGANID_NOT_EXIST_EXCEPTION);
+ DocumentEnum.ORGAN.getUrl());
} }
return organId; return organId;
} }
@@ -1,8 +1,6 @@
package com.cf.imes.framework.organ.core.security; package com.cf.imes.framework.organ.core.security;
import cn.hutool.core.collection.CollUtil; 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.exception.enums.GlobalErrorCodeConstants;
import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.servlet.ServletUtils; import com.cf.imes.framework.common.util.servlet.ServletUtils;
@@ -56,18 +54,10 @@ public class OrganSecurityWebFilter extends ApiRequestFilter {
this.organFrameworkService = organFrameworkService; this.organFrameworkService = organFrameworkService;
} }
@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
return super.shouldNotFilter(request) &&
!StrUtil.startWithAny(request.getRequestURI(), RpcConstants.RPC_API_PREFIX); // 因为 RPC API 也会透传组织编号
}
@Override @Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException { throws ServletException, IOException {
Long organId = WebFrameworkUtils.getOrganId(request); Long organId = WebFrameworkUtils.getOrganId(request);
//Long organId = OrganContextHolder.getOrganId();
boolean isRpcRequest = WebFrameworkUtils.isRpcRequest(request);
// 1. 登陆的用户,校验是否有权限访问该组织,避免越权问题。 // 1. 登陆的用户,校验是否有权限访问该组织,避免越权问题。
LoginUser user = SecurityFrameworkUtils.getLoginUser(); LoginUser user = SecurityFrameworkUtils.getLoginUser();
if (user != null) { if (user != null) {
@@ -76,8 +66,7 @@ public class OrganSecurityWebFilter extends ApiRequestFilter {
organId = user.getOrganId(); organId = user.getOrganId();
OrganContextHolder.setOrganId(organId); OrganContextHolder.setOrganId(organId);
// 如果传递了组织编号,则进行比对组织编号,避免越权问题 // 如果传递了组织编号,则进行比对组织编号,避免越权问题
} else if (!Objects.equals(user.getOrganId(), OrganContextHolder.getOrganId()) } else if (!Objects.equals(user.getOrganId(), OrganContextHolder.getOrganId())) { // Cloud 特殊逻辑:如果是 RPC 请求,就不校验了。主要考虑,一些场景下,会调用 OrganUtils 去切换组织
&& !isRpcRequest) { // Cloud 特殊逻辑:如果是 RPC 请求,就不校验了。主要考虑,一些场景下,会调用 OrganUtils 去切换组织
log.error("[doFilterInternal][组织({}) User({}/{}) 越权访问组织({}) URL({}/{})]", log.error("[doFilterInternal][组织({}) User({}/{}) 越权访问组织({}) URL({}/{})]",
user.getOrganId(), user.getId(), user.getUserType(), user.getOrganId(), user.getId(), user.getUserType(),
OrganContextHolder.getOrganId(), request.getRequestURI(), request.getMethod()); OrganContextHolder.getOrganId(), request.getRequestURI(), request.getMethod());
@@ -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.RedisMQTemplate;
import com.cf.imes.framework.mq.redis.core.job.RedisPendingMessageResendJob; 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.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.mq.redis.core.stream.AbstractRedisStreamMessageListener;
import com.cf.imes.framework.redis.config.ChenfengRedisAutoConfiguration; import com.cf.imes.framework.redis.config.ChenfengRedisAutoConfiguration;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -61,6 +62,26 @@ public class ChenfengRedisMQConsumerAutoConfiguration {
return container; 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 重新消费的任务 * 创建 Redis Stream 重新消费的任务
*/ */
@@ -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;
}
@@ -111,21 +111,29 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
Long organId = null; Long organId = null;
/**
* 用户首次密码登陆的时候,不会有token带入,直接捕捉异常抛出即可,组织ID后续会根据用户登录的组织进行填入,
* 这里的组织ID字段填入即使为空也可,后续的请求中都会带有token,再从缓存中获取到 token 数据,再获取组织ID,填入即可
*/
try { try {
// 获取 token 对应的缓存数据,并得到组织 ID // 获取 token 对应的缓存数据,并得到组织 ID
OAuth2AccessTokenDO oAuth2AccessTokenDO = get(authorization); OAuth2AccessTokenDO oAuth2AccessTokenDO = get(authorization);
organId = oAuth2AccessTokenDO.getOrganId(); organId = oAuth2AccessTokenDO.getOrganId();
}catch (Exception e){ }catch (Exception e){
} }
this.strictUpdateFill(metaObject, "organId", Long.class, organId ); this.strictUpdateFill(metaObject, "organId", Long.class, organId );
} }
// 从请求中获取到 token // 从请求中获取到 token
public static String obtainAuthorization(HttpServletRequest request, private static String obtainAuthorization(HttpServletRequest request,
String headerName, String parameterName) { String headerName, String parameterName) {
// 1. 获得 Token。优先级:Header > Parameter // 1. 获得 Token。优先级:Header > Parameter
String token = request.getHeader(headerName); String token = request.getHeader(headerName);
if (StrUtil.isEmpty(token)) { 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); String redisKey = String.format(OAUTH2_ACCESS_TOKEN, accessToken);
return JsonUtils.parseObject(stringRedisTemplate.opsForValue().get(redisKey), OAuth2AccessTokenDO.class); return JsonUtils.parseObject(stringRedisTemplate.opsForValue().get(redisKey), OAuth2AccessTokenDO.class);
} }
@@ -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.oauth2.dto.OAuth2AccessTokenCheckRespDTO;
import com.cf.imes.module.system.api.permission.PermissionApi; import com.cf.imes.module.system.api.permission.PermissionApi;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AccessDeniedException;
import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.filter.OncePerRequestFilter;
@@ -33,6 +35,7 @@ import java.nio.charset.StandardCharsets;
* @author 晨丰科技 * @author 晨丰科技
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j
public class TokenAuthenticationFilter extends OncePerRequestFilter { public class TokenAuthenticationFilter extends OncePerRequestFilter {
private final SecurityProperties securityProperties; private final SecurityProperties securityProperties;
@@ -129,14 +132,17 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
.setOrganId(WebFrameworkUtils.getOrganId(request)); .setOrganId(WebFrameworkUtils.getOrganId(request));
} }
@SneakyThrows
private LoginUser buildLoginUserByHeader(HttpServletRequest request) { private LoginUser buildLoginUserByHeader(HttpServletRequest request) {
String loginUserStr = request.getHeader(SecurityFrameworkUtils.LOGIN_USER_HEADER); String loginUserStr = request.getHeader(SecurityFrameworkUtils.LOGIN_USER_HEADER);
if(StrUtil.isNotEmpty(loginUserStr)) { if(StrUtil.isNotEmpty(loginUserStr)) {
LoginUser loginUser = JsonUtils.parseObject(loginUserStr, LoginUser.class); try {
//CommonResult<Boolean> superAdmin = permissionApi.hasAnyRoles(loginUser.getId(), "super_admin"); loginUserStr = URLDecoder.decode(loginUserStr, StandardCharsets.UTF_8.name()); // 解码,解决中文乱码问题
//loginUser.setIsSupAdmin(superAdmin.getCheckedData()); return JsonUtils.parseObject(loginUserStr, LoginUser.class);
loginUser.setNickname(URLDecoder.decode(loginUser.getNickname(),StandardCharsets.UTF_8)); } catch (Exception ex) {
return loginUser; log.error("[buildLoginUserByHeader][解析 LoginUser({}) 发生异常]", loginUserStr, ex); ;
throw ex;
}
} }
return null; return null;
} }
@@ -1,23 +1,37 @@
package com.cf.imes.framework.security.core.rpc; 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.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import feign.RequestInterceptor; import feign.RequestInterceptor;
import feign.RequestTemplate; 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 中,继续透传给被调用的服务 * LoginUser 的 RequestInterceptor 实现类:Feign 请求时,将 {@link LoginUser} 设置到 header 中,继续透传给被调用的服务
* *
* @author 晨丰科技 * @author 晨丰科技
*/ */
@Slf4j
public class LoginUserRequestInterceptor implements RequestInterceptor { public class LoginUserRequestInterceptor implements RequestInterceptor {
@Override @Override
@SneakyThrows
public void apply(RequestTemplate requestTemplate) { public void apply(RequestTemplate requestTemplate) {
LoginUser user = SecurityFrameworkUtils.getLoginUser(); LoginUser user = SecurityFrameworkUtils.getLoginUser();
if (user != null) { 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;
}
} }
} }
@@ -23,6 +23,13 @@ public interface SecurityFrameworkService {
*/ */
boolean hasAnyPermissions(String... permissions); boolean hasAnyPermissions(String... permissions);
/**
* 清空本地缓存
*
* @param
*/
void invalidateAll();
/** /**
* 判断是否有角色 * 判断是否有角色
* *
@@ -28,7 +28,7 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
/** /**
* 针对 {@link #hasAnyRoles(String...)} 的缓存 * 针对 {@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 分钟 Duration.ofMinutes(1L), // 过期时间 1 分钟
new CacheLoader<KeyValue<Long, List<String>>, Boolean>() { new CacheLoader<KeyValue<Long, List<String>>, Boolean>() {
@@ -42,7 +42,7 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
/** /**
* 针对 {@link #hasAnyPermissions(String...)} 的缓存 * 针对 {@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 分钟 Duration.ofMinutes(1L), // 过期时间 1 分钟
new CacheLoader<KeyValue<Long, List<String>>, Boolean>() { 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))); return hasAnyPermissionsCache.get(new KeyValue<>(SecurityFrameworkUtils.getLoginUserId(), Arrays.asList(permissions)));
} }
@Override
public void invalidateAll() {
hasAnyPermissionsCache.invalidateAll();
}
@Override @Override
public boolean hasRole(String role) { public boolean hasRole(String role) {
return hasAnyRoles(role); return hasAnyRoles(role);
@@ -22,11 +22,7 @@ import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono; 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.time.Duration;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.function.Function; 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) { public TokenAuthenticationFilter(ReactorLoadBalancerExchangeFilterFunction lbFunction) {
// Q:为什么不使用 OAuth2TokenApi 进行调用? // Q:为什么不使用 OAuth2TokenApi 进行调用?
// A1Spring Cloud OpenFeign 官方未内置 Reactive 的支持 https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#reactive-support // A1Spring 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) { private Mono<String> checkAccessToken(Long organId, String token) {
return webClient.get() return webClient.get()
.uri(OAuth2TokenApi.URL_CHECK, uriBuilder -> uriBuilder.queryParam("accessToken", token).build()) .uri(OAuth2TokenApi.URL_CHECK, uriBuilder -> uriBuilder.queryParam("accessToken", token).build())
// .headers(httpHeaders -> WebFrameworkUtils.setOrganIdHeader(organId, httpHeaders)) // 设置组织的 Header
.retrieve().bodyToMono(String.class); .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) { private LoginUser buildUser(String body) {
// 处理结果,结果不正确 // 处理结果,结果不正确
CommonResult<OAuth2AccessTokenCheckRespDTO> result = JsonUtils.parseObject(body, CHECK_RESULT_TYPE_REFERENCE); 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()) .setOrganId(tokenInfo.getOrganId()).setScopes(tokenInfo.getScopes())
.setLarge(tokenInfo.getLarge()).setDbNo(tokenInfo.getDbNo()).setTableNo(tokenInfo.getTableNo()) .setLarge(tokenInfo.getLarge()).setDbNo(tokenInfo.getDbNo()).setTableNo(tokenInfo.getTableNo())
.setDataCode(tokenInfo.getDataCode()).setIsSupAdmin(tokenInfo.getIsSupAdmin()) .setDataCode(tokenInfo.getDataCode()).setIsSupAdmin(tokenInfo.getIsSupAdmin())
.setNickname(URLEncoder.encode(tokenInfo.getNickname(), StandardCharsets.UTF_8)); .setNickname(tokenInfo.getNickname());
} }
@Override @Override
@@ -3,10 +3,15 @@ package com.cf.imes.gateway.util;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import com.cf.imes.framework.common.util.json.JsonUtils; import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.gateway.filter.security.LoginUser; 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.http.server.reactive.ServerHttpRequest;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.server.ServerWebExchange; 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 晨丰科技 * @author 晨丰科技
*/ */
@Slf4j
public class SecurityFrameworkUtils { public class SecurityFrameworkUtils {
private static final String AUTHORIZATION_HEADER = "Authorization"; private static final String AUTHORIZATION_HEADER = "Authorization";
@@ -101,8 +107,16 @@ public class SecurityFrameworkUtils {
* @param builder 请求 * @param builder 请求
* @param user 用户 * @param user 用户
*/ */
@SneakyThrows
public static void setLoginUserHeader(ServerHttpRequest.Builder builder, LoginUser user) { 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(DATA_CODE, user.getDataCode());
builder.header(ORGAN_ID, user.getOrganId().toString()); builder.header(ORGAN_ID, user.getOrganId().toString());
} }
@@ -13,6 +13,8 @@ import org.apache.ibatis.annotations.Mapper;
import com.cf.imes.module.executor.controller.admin.goods.vo.*; import com.cf.imes.module.executor.controller.admin.goods.vo.*;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
/** /**
* 生产单商品 Mapper * 生产单商品 Mapper
* *
@@ -23,6 +25,7 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
default PageResult<GoodsDO> selectPage(GoodsPageReqVO reqVO) { default PageResult<GoodsDO> selectPage(GoodsPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<GoodsDO>() return selectPage(reqVO, new LambdaQueryWrapperX<GoodsDO>()
.eq(GoodsDO::getOrganId,getUserOrganId())
.eqIfPresent(GoodsDO::getOrderId, reqVO.getOrderId()) .eqIfPresent(GoodsDO::getOrderId, reqVO.getOrderId())
.eqIfPresent(GoodsDO::getRawGoodsId, reqVO.getRawGoodsId()) .eqIfPresent(GoodsDO::getRawGoodsId, reqVO.getRawGoodsId())
.eqIfPresent(GoodsDO::getGoodsId, reqVO.getGoodsId()) .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);
// 单个修改删除状态 // 单个修改删除状态
@@ -9,6 +9,8 @@ import com.cf.imes.module.executor.dal.dataobject.module.ModuleDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import com.cf.imes.module.executor.controller.admin.module.vo.*; import com.cf.imes.module.executor.controller.admin.module.vo.*;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
/** /**
* 生产单模块 Mapper * 生产单模块 Mapper
* *
@@ -19,6 +21,7 @@ public interface ModuleMapper extends BaseMapperX<ModuleDO> {
default PageResult<ModuleDO> selectPage(ModulePageReqVO reqVO) { default PageResult<ModuleDO> selectPage(ModulePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ModuleDO>() return selectPage(reqVO, new LambdaQueryWrapperX<ModuleDO>()
.eq(ModuleDO::getOrganId,getUserOrganId())
.eqIfPresent(ModuleDO::getOrderId, reqVO.getOrderId()) .eqIfPresent(ModuleDO::getOrderId, reqVO.getOrderId())
.likeIfPresent(ModuleDO::getName, reqVO.getName()) .likeIfPresent(ModuleDO::getName, reqVO.getName())
.eqIfPresent(ModuleDO::getParentId, reqVO.getParentId()) .eqIfPresent(ModuleDO::getParentId, reqVO.getParentId())
@@ -41,10 +41,10 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
@Param("deleted") Integer deleted); @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); void deleteByPlateId(@Param("deletePlateIds") List<Long> deletePlateIds);
@@ -18,6 +18,8 @@ import com.cf.imes.module.executor.controller.admin.orderParts.vo.*;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.poi.ss.formula.functions.T; import org.apache.poi.ss.formula.functions.T;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
/** /**
* 生产单配件表 order_parts_{N} Mapper * 生产单配件表 order_parts_{N} Mapper
* *
@@ -28,6 +30,7 @@ public interface OrderPartsMapper extends BaseMapperX<OrderPartsDO> {
default PageResult<OrderPartsDO> selectPage(OrderPartsPageReqVO reqVO) { default PageResult<OrderPartsDO> selectPage(OrderPartsPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<OrderPartsDO>() return selectPage(reqVO, new LambdaQueryWrapperX<OrderPartsDO>()
.eq(OrderPartsDO::getOrganId,getUserOrganId())
.eqIfPresent(OrderPartsDO::getOrderId, reqVO.getOrderId()) .eqIfPresent(OrderPartsDO::getOrderId, reqVO.getOrderId())
.eqIfPresent(OrderPartsDO::getGoodsId, reqVO.getGoodsId()) .eqIfPresent(OrderPartsDO::getGoodsId, reqVO.getGoodsId())
.likeIfPresent(OrderPartsDO::getName, reqVO.getName()) .likeIfPresent(OrderPartsDO::getName, reqVO.getName())
@@ -62,7 +65,7 @@ public interface OrderPartsMapper extends BaseMapperX<OrderPartsDO> {
return respVO; 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);// 配件明细 List<PartGoodsRespVO> selectPartDetail(@Param("orderId") Long orderId, @Param("organId") Long organId);// 配件明细
@@ -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 com.cf.imes.module.executor.dal.dataobject.planitem.PlanItemDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import com.cf.imes.module.executor.controller.admin.plan.vo.*; 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 * 生产单开料排单 Mapper
@@ -25,6 +28,7 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
default PageResult<PlanDO> selectPage(PlanPageReqVO reqVO) { default PageResult<PlanDO> selectPage(PlanPageReqVO reqVO) {
if(StrUtil.isNotBlank(reqVO.getCustomer())) { if(StrUtil.isNotBlank(reqVO.getCustomer())) {
return selectJoinPage(reqVO, PlanDO.class, new MPJLambdaWrapperX<PlanDO>() return selectJoinPage(reqVO, PlanDO.class, new MPJLambdaWrapperX<PlanDO>()
.eq(PlanDO::getOrganId,getUserOrganId())
.eqIfPresent(PlanDO::getPlanNo, reqVO.getPlanNo()) .eqIfPresent(PlanDO::getPlanNo, reqVO.getPlanNo())
.eqIfPresent(PlanDO::getSort, reqVO.getSort()) .eqIfPresent(PlanDO::getSort, reqVO.getSort())
.eqIfPresent(PlanDO::getType, reqVO.getType()) .eqIfPresent(PlanDO::getType, reqVO.getType())
@@ -47,6 +51,7 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
} }
return selectPage(reqVO, new LambdaQueryWrapperX<PlanDO>() return selectPage(reqVO, new LambdaQueryWrapperX<PlanDO>()
.eq(PlanDO::getOrganId,getUserOrganId())
.eqIfPresent(PlanDO::getPlanNo, reqVO.getPlanNo()) .eqIfPresent(PlanDO::getPlanNo, reqVO.getPlanNo())
.eqIfPresent(PlanDO::getSort, reqVO.getSort()) .eqIfPresent(PlanDO::getSort, reqVO.getSort())
.eqIfPresent(PlanDO::getType, reqVO.getType()) .eqIfPresent(PlanDO::getType, reqVO.getType())
@@ -63,7 +68,7 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
// .orderByDesc(PlanDO::getId)); // .orderByDesc(PlanDO::getId));
} }
List<PlateOptimize> selectPlateListByPlanId(Long planId); List<PlateOptimize> selectPlateListByPlanId(@Param("planId") Long planId, @Param("organId") Long organId);
OptimizeParamRespVO getOptimizePlanParam(Long planId); OptimizeParamRespVO getOptimizePlanParam(Long planId);
@@ -19,5 +19,5 @@ import org.apache.ibatis.annotations.Param;
public interface PlanItemMapper extends BaseMapperX<PlanItemDO> { 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);
} }
@@ -19,6 +19,8 @@ import org.apache.ibatis.annotations.Mapper;
import com.cf.imes.module.executor.controller.admin.plate.vo.*; import com.cf.imes.module.executor.controller.admin.plate.vo.*;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
/** /**
* 生产单板件 Mapper * 生产单板件 Mapper
* *
@@ -29,6 +31,7 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
default PageResult<PlateDO> selectPage(PlatePageReqVO reqVO) { default PageResult<PlateDO> selectPage(PlatePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<PlateDO>() return selectPage(reqVO, new LambdaQueryWrapperX<PlateDO>()
.eq(PlateDO::getOrganId,getUserOrganId())
.eqIfPresent(PlateDO::getOrderId, reqVO.getOrderId()) .eqIfPresent(PlateDO::getOrderId, reqVO.getOrderId())
.likeIfPresent(PlateDO::getName, reqVO.getName()) .likeIfPresent(PlateDO::getName, reqVO.getName())
.eqIfPresent(PlateDO::getType, reqVO.getType()) .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); // 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); IPage<PlateResList> selectPlateByPlanId(@Param("page") IPage<PlateResList> page, @Param(Constants.WRAPPER) Wrapper<PlateDO> wrapper);
List<PlateParam> selectPlateList(Long planId); 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); // 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); // 明细 List<PlateGoodsRespVO> selectPlateGoodsList(@Param("orderId") Long orderId, @Param("organId") Long organId); // 明细
@@ -11,6 +11,8 @@ import com.cf.imes.module.executor.dal.dataobject.processStep.ProcessStepDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import com.cf.imes.module.executor.controller.admin.processStep.vo.*; import com.cf.imes.module.executor.controller.admin.processStep.vo.*;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
/** /**
* 生产单工序步骤 Mapper * 生产单工序步骤 Mapper
* *
@@ -22,6 +24,7 @@ public interface ProcessStepMapper extends BaseMapperX<ProcessStepDO> {
default PageResult<ProcessStepDO> selectPage(ProcessStepPageReqVO reqVO) { default PageResult<ProcessStepDO> selectPage(ProcessStepPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProcessStepDO>() return selectPage(reqVO, new LambdaQueryWrapperX<ProcessStepDO>()
.eqIfPresent(ProcessStepDO::getOrderId, reqVO.getOrderId()) .eqIfPresent(ProcessStepDO::getOrderId, reqVO.getOrderId())
.eq(ProcessStepDO::getOrganId,getUserOrganId())
.betweenIfPresent(ProcessStepDO::getFinishTime, reqVO.getFinishTime()) .betweenIfPresent(ProcessStepDO::getFinishTime, reqVO.getFinishTime())
.eqIfPresent(ProcessStepDO::getStatus, reqVO.getStatus()) .eqIfPresent(ProcessStepDO::getStatus, reqVO.getStatus())
.eqIfPresent(ProcessStepDO::getType, reqVO.getType()) .eqIfPresent(ProcessStepDO::getType, reqVO.getType())
@@ -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 com.cf.imes.module.executor.dal.dataobject.rawgoods.RawGoodsDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
/** /**
* 生产单设计商品表 order_raw_goods_{N} Mapper * 生产单设计商品表 order_raw_goods_{N} Mapper
* *
@@ -24,6 +26,7 @@ public interface RawGoodsMapper extends BaseMapperX<RawGoodsDO> {
default PageResult<RawGoodsDO> selectPage(RawGoodsPageReqVO reqVO) { default PageResult<RawGoodsDO> selectPage(RawGoodsPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<RawGoodsDO>() return selectPage(reqVO, new LambdaQueryWrapperX<RawGoodsDO>()
.eq(RawGoodsDO::getOrganId,getUserOrganId())
.eqIfPresent(RawGoodsDO::getOrderId, reqVO.getOrderId()) .eqIfPresent(RawGoodsDO::getOrderId, reqVO.getOrderId())
.eqIfPresent(RawGoodsDO::getRawGoodsId, reqVO.getRawGoodsId()) .eqIfPresent(RawGoodsDO::getRawGoodsId, reqVO.getRawGoodsId())
.likeIfPresent(RawGoodsDO::getGoodsName, reqVO.getGoodsName()) .likeIfPresent(RawGoodsDO::getGoodsName, reqVO.getGoodsName())
@@ -13,11 +13,14 @@ import org.apache.ibatis.annotations.Mapper;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
@Mapper @Mapper
public interface RemainPlateMapper extends BaseMapperX<RemainPlateDO> { public interface RemainPlateMapper extends BaseMapperX<RemainPlateDO> {
default PageResult<RemainPlateDO> selectPage(RemainPlatePageReqVO reqVO) { default PageResult<RemainPlateDO> selectPage(RemainPlatePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<RemainPlateDO>() return selectPage(reqVO, new LambdaQueryWrapperX<RemainPlateDO>()
.eq(RemainPlateDO::getOrganId,getUserOrganId())
.eqIfPresent(RemainPlateDO::getPlanId, reqVO.getPlanId()) .eqIfPresent(RemainPlateDO::getPlanId, reqVO.getPlanId())
.eqIfPresent(RemainPlateDO::getInitPlanId, reqVO.getInitPlanId()) .eqIfPresent(RemainPlateDO::getInitPlanId, reqVO.getInitPlanId())
.eqIfPresent(RemainPlateDO::getStatus, reqVO.getStatus()) .eqIfPresent(RemainPlateDO::getStatus, reqVO.getStatus())
@@ -41,11 +44,14 @@ public interface RemainPlateMapper extends BaseMapperX<RemainPlateDO> {
default List<RemainPlateDO> selectByPlanId(Long planId, Long userOrganId) { default List<RemainPlateDO> selectByPlanId(Long planId, Long userOrganId) {
return selectList( new LambdaQueryWrapperX<RemainPlateDO>() 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) { default int updateOrderDeleted(Collection<Long> ids, Integer deleted, Long organId) {
return update(new LambdaUpdateWrapper<RemainPlateDO>() return update(new LambdaUpdateWrapper<RemainPlateDO>()
@@ -9,6 +9,8 @@ import com.cf.imes.module.executor.service.rawgoods.RawGoodsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import java.util.*; import java.util.*;
@@ -47,6 +49,7 @@ public class GoodsServiceImpl implements GoodsService {
private OrderMapper orderMapper; private OrderMapper orderMapper;
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean createCorrespondsGoods(List<GoodsSaveReqVO> createReqVOS) { public Boolean createCorrespondsGoods(List<GoodsSaveReqVO> createReqVOS) {
List<Long> longs = new ArrayList<>(); List<Long> longs = new ArrayList<>();
// 校验生产单是否存在 // 校验生产单是否存在
@@ -115,7 +115,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
@Override @Override
public List<PlateOptimize> getPlateListByPlanId(Long planId) { public List<PlateOptimize> getPlateListByPlanId(Long planId) {
return planMapper.selectPlateListByPlanId(planId); return planMapper.selectPlateListByPlanId(planId,getUserOrganId());
} }
@Override @Override
@@ -324,11 +324,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// .eq(GoodsDO::getOrderId, orderId) // .eq(GoodsDO::getOrderId, orderId)
// ); // );
List<GoodsReqVO> goodsDOS = goodsMapper.selectGoodsList(orderId); List<GoodsReqVO> goodsDOS = goodsMapper.selectGoodsList(orderId,getUserOrganId());
// PlanDO planDO = planMapper.selectByOrderId(orderId); // 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<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(); Integer orderModelSize = plateDOS.size();
@@ -29,6 +29,7 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper; 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.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.*; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*;
/** /**
@@ -108,7 +109,7 @@ public class OrderPartsServiceImpl implements OrderPartsService {
@Override @Override
public PageResult<OrderPartsRespVO> getPartsPageByTerms(PlateTermsPageReqVO pageReqVO) { public PageResult<OrderPartsRespVO> getPartsPageByTerms(PlateTermsPageReqVO pageReqVO) {
PageDTO<OrderPartsRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); 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()); return new PageResult<OrderPartsRespVO>(pageRes.getRecords(), pageRes.getTotal());
} }
@@ -1,6 +1,7 @@
package com.cf.imes.module.executor.service.plan; package com.cf.imes.module.executor.service.plan;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.baomidou.mybatisplus.core.metadata.IPage; 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 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.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.*; 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(); String orderNos = itemList.stream().map(i -> i.getOrderId()).distinct().collect(Collectors.toList()).toString();
plan.setOrderNos(orderNos); plan.setOrderNos(orderNos);
planMapper.insert(plan); 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(); Long planId = plan.getId();
/* List<Long> orderIds = createReqVO.getOrderIds(); /* List<Long> orderIds = createReqVO.getOrderIds();
if (CollectionUtil.isNotEmpty(orderIds)) { if (CollectionUtil.isNotEmpty(orderIds)) {
@@ -119,7 +127,7 @@ public class PlanServiceImpl implements PlanService {
//List<Long> plateIds = createReqVO.getPlateIds(); //List<Long> plateIds = createReqVO.getPlateIds();
Set<Long> itemIds = plateMapper.selectBatchOrderIdsAndGoodsIds(itemList); Set<Long> itemIds = plateMapper.selectBatchOrderIdsAndGoodsIds(itemList,getUserOrganId());
if (CollectionUtil.isNotEmpty(itemIds)) { if (CollectionUtil.isNotEmpty(itemIds)) {
ArrayList<PlanItemDO> planItemDOS = new ArrayList<>(); ArrayList<PlanItemDO> planItemDOS = new ArrayList<>();
@@ -189,6 +197,12 @@ public class PlanServiceImpl implements PlanService {
planMapper.deleteById(id); planMapper.deleteById(id);
/*planOrderMapper.delete(new LambdaQueryWrapperX<PlanOrderDO>().eq(PlanOrderDO::getPlanId, id));*/ /*planOrderMapper.delete(new LambdaQueryWrapperX<PlanOrderDO>().eq(PlanOrderDO::getPlanId, id));*/
planItemMapper.delete(new LambdaQueryWrapperX<PlanItemDO>().eq(PlanItemDO::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; return Boolean.TRUE;
} }
@@ -211,8 +225,12 @@ public class PlanServiceImpl implements PlanService {
.map(e -> e.getOrderId()) .map(e -> e.getOrderId())
.collect(Collectors.toSet());*/ .collect(Collectors.toSet());*/
PlanRespVO respVO = BeanUtils.toBean(planDO, PlanRespVO.class); PlanRespVO respVO = BeanUtils.toBean(planDO, PlanRespVO.class);
List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX<GoodsDO>().in(GoodsDO::getOrderId, orderIds)); List<GoodsDO> goodsDOS = goodsMapper.selectList(new LambdaQueryWrapperX<GoodsDO>()
List<PlateDO> plateDOS = plateMapper.selectList(new LambdaQueryWrapperX<PlateDO>().in(PlateDO::getGoodsId, goodsDOS.stream().map(GoodsDO::getGoodsId).collect(Collectors.toSet()))); .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() List<PlateInfoVO> plateInfoVOS = goodsDOS.stream().map(e -> PlateInfoVO.builder()
.material(e.getMaterial()) .material(e.getMaterial())
.width(e.getWidth()) .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<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); PageResult<PlanRespVO> planRespVOPageResult = BeanUtils.toBean(planDOPageResult, PlanRespVO.class);
@@ -290,6 +308,8 @@ public class PlanServiceImpl implements PlanService {
QueryWrapperX<OrderDO> queryWrapperX = new QueryWrapperX<>(); QueryWrapperX<OrderDO> queryWrapperX = new QueryWrapperX<>();
queryWrapperX queryWrapperX
.eq("a.organ_id",getUserOrganId())
.eq("a.status",2)
.eqIfPresent("a.id", pageReqVO.getOrderId()) .eqIfPresent("a.id", pageReqVO.getOrderId())
.isNull("opi.item_id") .isNull("opi.item_id")
.eqIfPresent("a.customer", pageReqVO.getConsignee()) .eqIfPresent("a.customer", pageReqVO.getConsignee())
@@ -321,7 +341,7 @@ public class PlanServiceImpl implements PlanService {
List<OrderRespVOCopy> records = orderRespVOCopies.getRecords(); List<OrderRespVOCopy> records = orderRespVOCopies.getRecords();
for (OrderRespVOCopy orderRespVOCopy : records) { 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); orderRespVOCopy.setPlatePages(platePages);
} }
@@ -345,7 +365,7 @@ public class PlanServiceImpl implements PlanService {
@Override @Override
public List<PlatePage> getNotPlanPlateListPage(PlateReqPageVO pageVO) { public List<PlatePage> getNotPlanPlateListPage(PlateReqPageVO pageVO) {
// PageDTO<PlatePage> page = new PageDTO<>(pageVO.getPageNo(), pageVO.getPageSize()); // 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; return pageRes;
} }
@@ -382,7 +402,9 @@ public class PlanServiceImpl implements PlanService {
if (planDO.getStatus().equals(PlanStatusEnum.NEWORDER.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.BOARDHASBEENAPPLIEDFOR.getStatus())) { if (planDO.getStatus().equals(PlanStatusEnum.NEWORDER.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.BOARDHASBEENAPPLIEDFOR.getStatus())) {
throw exception(PLAN_NOT_ALLOW_CANCEL); 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) .stream().map(PlanItemDO::getItemId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
plateMapper.update(new LambdaUpdateWrapper<PlateDO>().in(PlateDO::getId, itemIds).set(PlateDO::getIsCancel, Boolean.TRUE)); 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()) queryWrapperX.eq("p.plan_id", vo.getPlanId())
.eq("a.organ_id",getUserOrganId())
.eqIfPresent("a.is_door", vo.getIsDoor()) .eqIfPresent("a.is_door", vo.getIsDoor())
.eqIfPresent("a.is_special_shaped", vo.getSpecialShaped()) .eqIfPresent("a.is_special_shaped", vo.getSpecialShaped())
.eqIfPresent("a.is_sculpt", vo.getSculpt()) .eqIfPresent("a.is_sculpt", vo.getSculpt())
@@ -431,6 +454,7 @@ public class PlanServiceImpl implements PlanService {
MPJLambdaWrapperX<OrderDO> lambdaWrapperX = new MPJLambdaWrapperX<>(); MPJLambdaWrapperX<OrderDO> lambdaWrapperX = new MPJLambdaWrapperX<>();
lambdaWrapperX.leftJoin(OrderItemDO.class, OrderItemDO::getOrderId, OrderDO::getId) lambdaWrapperX.leftJoin(OrderItemDO.class, OrderItemDO::getOrderId, OrderDO::getId)
.leftJoin(PlanItemDO.class, PlanItemDO::getItemId, OrderItemDO::getId) .leftJoin(PlanItemDO.class, PlanItemDO::getItemId, OrderItemDO::getId)
.eq(PlanItemDO::getOrganId,getUserOrganId())
.eq(PlanItemDO::getPlanId, pageReqVO.getPlanId()); .eq(PlanItemDO::getPlanId, pageReqVO.getPlanId());
PageResult<OrderDO> pageResult = orderMapper.selectJoinPage(pageReqVO, OrderDO.class, lambdaWrapperX); PageResult<OrderDO> pageResult = orderMapper.selectJoinPage(pageReqVO, OrderDO.class, lambdaWrapperX);
@@ -447,6 +471,7 @@ public class PlanServiceImpl implements PlanService {
.selectSum(PlateDO::getArea, "area") .selectSum(PlateDO::getArea, "area")
.selectCount(PlateDO::getId, "num") .selectCount(PlateDO::getId, "num")
.isNotNull(PlanItemDO::getId) .isNotNull(PlanItemDO::getId)
.eq(GoodsDO::getOrganId,getUserOrganId())
.eq(GoodsDO::getOrderId, pageVO.getOrderId()) .eq(GoodsDO::getOrderId, pageVO.getOrderId())
.groupBy(GoodsDO::getId) .groupBy(GoodsDO::getId)
); );
@@ -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.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; 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.executor.service.optimizeplan.OptimizePlanService.ORDER_PLATE_MODEL;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.PLATE_NOT_EXISTS; 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(); LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
// 查询生产单下的大板,余料板,排单状态的信息 // 查询生产单下的大板,余料板,排单状态的信息
PlateDetailRespVO plateDetailRespVO = orderItemMapper.selectPlateNumList(reqVO.getOrderId()); PlateDetailRespVO plateDetailRespVO = orderItemMapper.selectPlateNumList(reqVO.getOrderId(),getUserOrganId());
// PlateDetailRespVO plateDetailRespVO = plateMapper.selectPlateNumList(reqVO); // PlateDetailRespVO plateDetailRespVO = plateMapper.selectPlateNumList(reqVO);
plateDetailRespVO.setCompanyId(loginUser.getId()); plateDetailRespVO.setCompanyId(loginUser.getId());
// PlateRespVO plateRespVO = BeanUtil.toBean(plateDetailRespVO, PlateRespVO.class); // PlateRespVO plateRespVO = BeanUtil.toBean(plateDetailRespVO, PlateRespVO.class);
// 查询生产单下的板材详细信息 // 查询生产单下的板材详细信息
List<PlateRespVO> plateRespVOS = orderItemMapper.selectPlateList(reqVO); List<PlateRespVO> plateRespVOS = orderItemMapper.selectPlateList(reqVO,getUserOrganId());
// List<PlateRespVO> plateRespVOS2 = plateRespVOS // List<PlateRespVO> plateRespVOS2 = plateRespVOS
// .stream() // .stream()
@@ -171,6 +172,7 @@ public class PlateServiceImpl implements PlateService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void deletePlates(Set<Long> ids) { public void deletePlates(Set<Long> ids) {
plateMapper.deleteBatchIds(ids); plateMapper.deleteBatchIds(ids);
} }
@@ -184,7 +186,7 @@ public class PlateServiceImpl implements PlateService {
@Override @Override
public PageResult<PlateRespVO> getPlatePageByTerms(PlateTermsPageReqVO pageReqVO) { public PageResult<PlateRespVO> getPlatePageByTerms(PlateTermsPageReqVO pageReqVO) {
PageDTO<PlateRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); 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()); 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>() List<BodyPlateIdDTO> list = plateMapper.selectJoinList(BodyPlateIdDTO.class, new MPJLambdaWrapperX<PlateDO>()
.selectAs(PlateDO::getId, "plateId") .selectAs(PlateDO::getId, "plateId")
.leftJoin(OrderItemDO.class, OrderItemDO::getPlateId, PlateDO::getId) .leftJoin(OrderItemDO.class, OrderItemDO::getPlateId, PlateDO::getId)
.eq(OrderItemDO::getOrganId,getUserOrganId())
.in(OrderItemDO::getBodyId, bodyIds) .in(OrderItemDO::getBodyId, bodyIds)
.select(OrderItemDO::getBodyId) .select(OrderItemDO::getBodyId)
); );
@@ -223,9 +226,7 @@ public class PlateServiceImpl implements PlateService {
List<List<List<Object>>> data = new ArrayList<>(); List<List<List<Object>>> data = new ArrayList<>();
map.entrySet().forEach(e->{ map.entrySet().forEach(e->{
bodyPlateDetailVOS.add(BodyPlateDetailVO.builder() bodyPlateDetailVOS.add(BodyPlateDetailVO.builder()
// 将造型的数据转换成 抽取后的数据结构
.orderModelList(e.getValue()) .orderModelList(e.getValue())
// .orderModelList(e.getValue())
.bodyId(e.getKey()) .bodyId(e.getKey())
.build() .build()
); );
@@ -1,6 +1,7 @@
package com.cf.imes.module.executor.service.process; package com.cf.imes.module.executor.service.process;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; 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.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO;
import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO; import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO;
@@ -35,6 +36,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; 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.*; 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++);// 计划日期没有填写 .setStatus(false).setProcessinfoId(processRespDTO.getId()).setOrderProcessId(orderProcess.getId()).setFinishTime(null).setSort(INDEX++);// 计划日期没有填写
processStepDOS.add(processStepDO); processStepDOS.add(processStepDO);
// 生产单中是否存在加工组,若存在加工组,需要逐条加工组信息写入到生产单工序步骤表 // 生产单中是否存在加工组,若存在加工组,需要逐条加工组信息写入到生产单工序步骤表
if (processRespDTO.getType() == ProcessTypeEnum.TYPE_SEVEN.getStatus()) { if (processRespDTO.getType() == ProcessTypeEnum.TYPE_SEVEN.getStatus()) {
List<OrderGroupDO> orderGroupDOS = orderGroupMapper.getOrderGroupByOrderId(createReqVO.getOrderId(), SecurityFrameworkUtils.getLoginUser().getOrganId()); List<OrderGroupDO> orderGroupDOS = orderGroupMapper.getOrderGroupByOrderId(createReqVO.getOrderId(), SecurityFrameworkUtils.getLoginUser().getOrganId());
if (orderGroupDOS.size() != 0) { // 有加工组 if (orderGroupDOS.size() != 0) { // 有加工组
for (int i = 0; i < orderGroupDOS.size(); i++) { for (int i = 0; i < orderGroupDOS.size(); i++) {
@@ -148,6 +152,7 @@ public class OrderProcessServiceImpl implements OrderProcessService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void updateOrderProcess(OrderProcessSaveReqVO updateReqVO) { public void updateOrderProcess(OrderProcessSaveReqVO updateReqVO) {
// 校验存在 // 校验存在
validateOrderProcessExists(updateReqVO.getId()); validateOrderProcessExists(updateReqVO.getId());
@@ -157,6 +162,7 @@ public class OrderProcessServiceImpl implements OrderProcessService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void deleteOrderProcess(Long id) { public void deleteOrderProcess(Long id) {
// 校验存在 // 校验存在
validateOrderProcessExists(id); validateOrderProcessExists(id);
@@ -177,12 +183,12 @@ public class OrderProcessServiceImpl implements OrderProcessService {
@Override @Override
public OrderProcessDO getOrderProcess(Long orderId) { public OrderProcessDO getOrderProcess(Long orderId) {
return orderProcessMapper.selectOne("order_id", orderId); return orderProcessMapper.selectOne("order_id", orderId ,"organ_id",getUserOrganId());
} }
@Override @Override
public OrderProcessDO getOrderProcessByProcessGroupId(Long processGroupId) { public OrderProcessDO getOrderProcessByProcessGroupId(Long processGroupId) {
return orderProcessMapper.selectOne("group_id", processGroupId); return orderProcessMapper.selectOne("group_id", processGroupId,"organ_id",getUserOrganId());
} }
} }
@@ -30,6 +30,7 @@ public class ProcessStepServiceImpl implements ProcessStepService {
private ProcessStepMapper processStepMapper; private ProcessStepMapper processStepMapper;
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Long createProcessStep(ProcessStepSaveReqVO createReqVO) { public Long createProcessStep(ProcessStepSaveReqVO createReqVO) {
// 插入 // 插入
ProcessStepDO processStep = BeanUtils.toBean(createReqVO, ProcessStepDO.class); ProcessStepDO processStep = BeanUtils.toBean(createReqVO, ProcessStepDO.class);
@@ -39,6 +40,7 @@ public class ProcessStepServiceImpl implements ProcessStepService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void updateProcessStep(ProcessStepSaveReqVO updateReqVO) { public void updateProcessStep(ProcessStepSaveReqVO updateReqVO) {
// 校验存在 // 校验存在
validateProcessStepExists(updateReqVO.getId()); validateProcessStepExists(updateReqVO.getId());
@@ -48,6 +50,7 @@ public class ProcessStepServiceImpl implements ProcessStepService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void deleteProcessStep(Long id) { public void deleteProcessStep(Long id) {
// 校验存在 // 校验存在
validateProcessStepExists(id); validateProcessStepExists(id);
@@ -21,6 +21,7 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.executor.dal.mysql.rawgoods.RawGoodsMapper; 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.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; import static com.cf.imes.module.system.enums.ErrorCodeConstants.RAW_GOODS_NOT_EXISTS;
/** /**
@@ -100,6 +101,6 @@ public class RawGoodsServiceImpl implements RawGoodsService {
@Override @Override
public List<RawGoodsDO> getRawGoodsByOrder(Long orderId) { public List<RawGoodsDO> getRawGoodsByOrder(Long orderId) {
return rawGoodsMapper.selectList(RawGoodsDO::getOrderId, orderId); return rawGoodsMapper.selectList(RawGoodsDO::getOrderId, orderId,RawGoodsDO::getOrganId,getUserOrganId());
} }
} }
@@ -17,8 +17,8 @@
og.*, og.*,
orp.id as remainId orp.id as remainId
from order_goods og from order_goods og
left join order_remain_plate orp on og.id = orp.goods_id left join order_remain_plate orp on og.id = orp.goods_id and og.organ_id = orp.organ_id
where og.order_id = #{orderId} where og.order_id = #{orderId} and og.organ_id = #{organId}
</select> </select>
@@ -31,8 +31,8 @@
og.*, og.*,
orp.id as remainId orp.id as remainId
from order_goods og from order_goods og
left join order_remain_plate orp on og.id = orp.goods_id left join order_remain_plate orp on og.id = orp.goods_id and og.organ_id = orp.organ_id
where og.order_id in where og.organ_id =#{organId} and og.order_id in
<foreach item="id" collection="orderIds" open="(" separator="," close=")"> <foreach item="id" collection="orderIds" open="(" separator="," close=")">
#{id} #{id}
@@ -4,12 +4,12 @@
<select id="selectOrderPage" resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy"> <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, 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 from `order` a
left join order_item oi on a.id = oi.order_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 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 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 left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
${ew.customSqlSegment} ${ew.customSqlSegment}
@@ -70,38 +70,38 @@
</resultMap> </resultMap>
<select id="selectPlateList" <select id="selectPlateList"
resultMap="PlateListMap" resultMap="PlateListMap"
parameterType="com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailReqVO"> parameterType="map">
select distinct select distinct
op.*, op.*,
og.color as color, og.color as color,
og.material as material, og.material as material,
ob.name as bodyName, ob.name as bodyName,
ob.room_name as roomName, ob.room_name as roomName,
oi.id as itemId, oi.id as itemId,
oi.group_id as processGroupId, oi.group_id as processGroupId,
og.brand as brand, og.brand as brand,
(case (case
when p.texture = '' then '是' when p.texture = '' then '是'
else '否' end ) as hasTexture, else '否' end ) as hasTexture,
og.height as bigPlateLength, og.height as bigPlateLength,
og.width as bigPlateWidth, og.width as bigPlateWidth,
og.spec as spec og.spec as spec
from order_item oi from order_item oi
join order_plate op on oi.plate_id = op.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 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 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 join plate p on og.goods_id = p.id and og.organ_id = p.organ_id
<where> <where>
oi.organ_id = #{organId}
<if test="orderId != null and orderId != ''"> <if test="reqVO.orderId != null and reqVO.orderId != ''">
AND oi.order_id = #{orderId} AND oi.order_id = #{reqVO.orderId}
</if> </if>
<if test="bodyId != null and bodyId != ''"> <if test="reqVO.bodyId != null and reqVO.bodyId != ''">
AND oi.body_id = #{bodyId} AND oi.body_id = #{reqVO.bodyId}
</if> </if>
<if test="plateId != null and plateId != ''"> <if test="reqVO.plateId != null and reqVO.plateId != ''">
AND oi.plate_id = #{plateId} AND oi.plate_id = #{reqVO.plateId}
</if> </if>
</where> </where>
@@ -126,11 +126,11 @@
op.status as planStatus, op.status as planStatus,
sum(orp.count )as remainPlateNum sum(orp.count )as remainPlateNum
from order_item oi from order_item oi
join order_plan_item opi on oi.id = opi.item_id 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 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 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 join order_goods og on oi.order_id = og.order_id and oi.organ_id = og.organ_id
where oi.order_id = #{orderId} where oi.organ_id = #{organId} and oi.order_id = #{orderId}
group by planStatus; group by planStatus;
</select> </select>
@@ -7,8 +7,8 @@
SELECT a.id, a.goods_id, a.name, a.material, a.type, a.model, a.spec, a.brand, a.factory, 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 a.unit, a.price, a.is_composite, a.remark, b.num
FROM order_parts a FROM order_parts a
LEFT JOIN order_item b ON a.id = b.parts_id LEFT JOIN order_item b ON a.id = b.parts_id and a.organ_id = b.organ_id
WHERE b.order_id = #{orderId} WHERE b.organ_id =#{organId} and b.order_id = #{orderId}
AND (#{roomId} IS NULL OR b.room_id = #{roomId}) AND (#{roomId} IS NULL OR b.room_id = #{roomId})
AND (#{bodyId} IS NULL OR b.body_id = #{bodyId}) AND (#{bodyId} IS NULL OR b.body_id = #{bodyId})
@@ -108,14 +108,16 @@
</select> </select>
<select id="selectPlateListByPlanId" <select id="selectPlateListByPlanId"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize"> 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.* 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 from order_goods a
left join order_plate b on a.goods_id = b.goods_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 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.goods_id = d.goods_id and d.plan_id = c.plan_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} where c.plan_id = #{planId} and c.organ_id = #{organId}
GROUP BY a.id, d.id GROUP BY a.id, a.goods_name, a.material, a.color, a.width, a.height, a.thickness,d.id
</select> </select>
@@ -14,21 +14,25 @@
<result property="area" column="area"/> <result property="area" column="area"/>
</resultMap> </resultMap>
<select id="selectGoodsList" resultMap="GoodsListMap"> <select id="selectGoodsList" resultMap="GoodsListMap" parameterType="java.lang.Long">
select og.material as material, select distinct
og.width as width, og.material as material,
og.height as height, og.width as width,
og.thickness as thickness , og.height as height,
og.color as color, og.thickness as thickness ,
count(oi.plate_id) as plateNum, og.color as color,
ROUND(og.height * og.width , 2) as area count(oi.plate_id) as plateNum,
ROUND(og.height * og.width , 2) as area
from order_plan_item opi from order_plan_item opi
join order_item oi on opi.item_id = oi.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 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=","> <foreach collection="planIds" item="ids" open="(" close=")" separator=",">
#{ids} #{ids}
</foreach> </foreach>
@@ -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 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 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_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 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 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 left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
<where> <where>
a.is_cancel = 0 a.organ_id = #{organId}
and a.is_cancel = 0
and opi.item_id is null and opi.item_id is null
<if test="orderId !=null"> <if test="orderId !=null">
and a.order_id = #{orderId} and a.order_id = #{orderId}
@@ -30,9 +31,9 @@
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList"> 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 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 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_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 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 LEFT JOIN order_plan_item p ON b.id = p.item_id and b.organ_id = p.organ_id
${ew.customSqlSegment} ${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.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 a.side_hole_count, a.front_model_count, a.back_model_count, a.remark, c.material, c.color
FROM order_plate a 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_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 LEFT JOIN order_item b ON a.id = b.plate_id and a.organ_id = b.organ_id
WHERE b.order_id = #{orderId} WHERE b.organ_id = #{organId} and b.order_id = #{orderId}
AND (#{roomId} IS NULL OR b.room_id = #{roomId}) AND (#{roomId} IS NULL OR b.room_id = #{roomId})
AND (#{bodyId} IS NULL OR b.body_id = #{bodyId}) AND (#{bodyId} IS NULL OR b.body_id = #{bodyId})
GROUP BY a.id, c.material, c.color; GROUP BY a.id, c.material, c.color;
@@ -63,8 +64,8 @@
<select id="selectBatchOrderIdsAndGoodsIds" resultType="java.lang.Long"> <select id="selectBatchOrderIdsAndGoodsIds" resultType="java.lang.Long">
select oi.id from order_plate op select oi.id from order_plate op
join order_item oi on op.id = oi.plate_id and op.order_id = oi.order_id 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.order_id in where op.organ_id = #{organId} and op.order_id in
<foreach collection="itemList" item="item" open="(" close=")" separator=","> <foreach collection="itemList" item="item" open="(" close=")" separator=",">
(#{item.orderId}) (#{item.orderId})
</foreach> </foreach>
@@ -141,11 +142,11 @@
og.name as processGroupName, 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 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 from order_plate op
left join order_goods ogs on op.goods_id = ogs.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 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 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 left join order_group og on oi.group_id = og.id and oi.organ_id = og.organ_id
where op.order_id = #{orderId} where op.order_id =#{orderId} and op.organ_id = #{organId}
</select> </select>
@@ -162,12 +163,12 @@
og.name as processGroupName, 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 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 from order_plate op
left join order_goods ogs on op.goods_id = ogs.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 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 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 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=","> <foreach collection="orderIds" item="orderIds" open="(" close=")" separator=",">
@@ -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.OrderModuleVO;
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderPlateRespVO; 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.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.process.ProductionProcessService;
import com.cf.imes.module.manage.service.query.ProductionStatusService; import com.cf.imes.module.manage.service.query.ProductionStatusService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; 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") @GetMapping("/page")
@Operation(summary = "查看生产工序分页") @Operation(summary = "查看生产工序分页")
@@ -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;
}
@@ -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;
}
@@ -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));
}
}
@@ -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> {
}
@@ -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.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; 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.*; import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
@Service @Service
@@ -64,11 +65,18 @@ public class PackServiceImpl implements PackService {
@Override @Override
public PageResult<PackRespVO> getPackPage(PackPageReqVO pageReqVO) { 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()); PageDTO<PackRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
// 根据生产状态查询生产单号 // 根据生产状态查询生产单号
List<Long> collect = productionStatusMapper.selectPackPage(pageReqVO,getUserOrganId()).stream().map(OrderDO::getId).collect(Collectors.toList()); 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()); IPage<PackRespVO> packRespVOS = productionStatusMapper.selectOrderPlate(page,collect,getUserOrganId());
@@ -4,15 +4,12 @@ package com.cf.imes.module.manage.service.process;
import com.cf.imes.framework.common.pojo.PageResult; 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.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.OrderModuleVO;
import com.cf.imes.module.manage.dal.dataobject.process.ProcessDO;
import java.util.List; import java.util.List;
public interface ProductionProcessService { public interface ProductionProcessService {
// 查看组织的工序信息
List<ProcessDO> getProcess(Long userId);
// 生产工序单分页查询 // 生产工序单分页查询
@@ -1,50 +1,34 @@
package com.cf.imes.module.manage.service.process; package com.cf.imes.module.manage.service.process;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.cf.imes.framework.common.enums.ProcessProcessingTypeEnum; import com.cf.imes.framework.common.enums.ProcessProcessingTypeEnum;
import com.cf.imes.framework.common.enums.ProcessingStatusEnum; 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.exception.util.ServiceExceptionUtil;
import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils; 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.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.OrderModuleVO;
import com.cf.imes.module.manage.dal.dataobject.pack.OrderBodyDO; 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.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.pack.OrderBodyMapper;
import com.cf.imes.module.manage.dal.mysql.plate.OrderPlateMapper; 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.process.*;
import com.cf.imes.module.manage.dal.mysql.query.OrderItemMapper; 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.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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; 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.getLoginUser;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; 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 @Resource
private ProcessStepItemMapper processStepItemMapper; private ProcessStepItemMapper processStepItemMapper;
@Resource
private ProcessMapper processMapper;
@Resource @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 @Override
public PageResult<ProcessRespVO> getProcessPage(ProcessPageReqVO pageReqVO) { 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()); PageDTO<ProcessRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
IPage<ProcessRespVO> processRespVOS = processStepMapper.selectOrder(page,pageReqVO,getUserOrganId()); IPage<ProcessRespVO> processRespVOS = processStepMapper.selectOrder(page,pageReqVO,getUserOrganId());
@@ -120,6 +99,9 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
// 修改工序明细表的工序状态 // 修改工序明细表的工序状态
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@@ -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();
}
}
@@ -60,10 +60,10 @@
and opsi.status = #{pageReqVO.processStatus} and opsi.status = #{pageReqVO.processStatus}
</if> </if>
<if test="pageReqVO.orderId != null"> <if test="pageReqVO.orderId != null">
and o.id = #{pageReqVO.orderId} and ops.order_id = #{pageReqVO.orderId}
</if> </if>
<if test="pageReqVO.customOrderNo != null"> <if test="pageReqVO.customOrderNo != null">
and o.custom_order_no = #{pageReqVO.customOrderNo} and o.custom_order_no like concat('%', #{pageReqVO.customOrderNo},'%')
</if> </if>
<if test="pageReqVO.customer != null"> <if test="pageReqVO.customer != null">
and o.customer like concat('%',#{pageReqVO.customer},'%') and o.customer like concat('%',#{pageReqVO.customer},'%')
@@ -153,11 +153,11 @@
ops.status as status, ops.status as status,
ops.manager as manager, ops.manager as manager,
ops.finish_time as processDate, ops.finish_time as processDate,
opsi.group_name as groupName, op.name as groupName,
ops.sort ops.sort
from order_process_step ops 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} where ops.order_id = #{orderNo} and ops.organ_id = #{organId}
order by ops.sort ; order by ops.sort ;
@@ -114,4 +114,22 @@ public class ProcessController {
BeanUtils.toBean(list, ProcessRespVO.class)); 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));
}
} }
@@ -1,7 +1,7 @@
package com.cf.imes.module.system.dal.mysql.permission; 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.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.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.LoginUser;
@@ -12,9 +12,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects;
@Mapper @Mapper
public interface RoleMapper extends BaseMapperX<RoleDO> { public interface RoleMapper extends BaseMapperX<RoleDO> {
@@ -28,7 +26,7 @@ public interface RoleMapper extends BaseMapperX<RoleDO> {
//如果是超级管理员并且未传organId,就查看自己的的 //如果是超级管理员并且未传organId,就查看自己的的
lambdaQueryWrapperX.inIfPresent(RoleDO::getOrganId,0L,loginUser.getOrganId()); lambdaQueryWrapperX.inIfPresent(RoleDO::getOrganId,0L,loginUser.getOrganId());
}*/ }*/
if(isSupAdmin && !Objects.isNull(reqVO.getOrganId())) { if(isSupAdmin && ObjectUtil.isNotNull(reqVO.getOrganId())) {
//如果是超级管理员并且传入organId,就查看传入的组织 //如果是超级管理员并且传入organId,就查看传入的组织
lambdaQueryWrapperX.eqIfPresent(RoleDO::getOrganId, reqVO.getOrganId()); lambdaQueryWrapperX.eqIfPresent(RoleDO::getOrganId, reqVO.getOrganId());
} else { } else {
@@ -41,7 +39,7 @@ public interface RoleMapper extends BaseMapperX<RoleDO> {
.eqIfPresent(RoleDO::getStatus, reqVO.getStatus()) .eqIfPresent(RoleDO::getStatus, reqVO.getStatus())
.betweenIfPresent(RoleDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(RoleDO::getCreateTime, reqVO.getCreateTime())
.ne(RoleDO::getId, 1) .ne(RoleDO::getId, 1)
.orderByDesc(RoleDO::getId); .orderByAsc(RoleDO::getSort);
return selectPage(reqVO, lambdaQueryWrapperX); return selectPage(reqVO, lambdaQueryWrapperX);
} }
@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; 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.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.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.ProcessDO;
import com.cf.imes.module.system.dal.dataobject.process.ProcessUserDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -50,4 +52,16 @@ public interface ProcessMapper extends BaseMapperX<ProcessDO> {
} }
int deleteById(@Param("id") Long id); 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));
}
} }
@@ -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";
}
@@ -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();
}
}
@@ -51,8 +51,9 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
@Transactional @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) { 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); 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); return createOAuth2AccessToken(refreshTokenDO, clientDO);
} }
@@ -84,23 +85,33 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "刷新令牌已过期"); throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "刷新令牌已过期");
} }
// 创建访问令牌 // // 创建访问令牌
return createOAuth2AccessToken(refreshTokenDO, clientDO); // return createOAuth2AccessToken(refreshTokenDO, clientDO);
return null;
} }
@Override @Override
public OAuth2AccessTokenDO getAccessToken(String accessToken) { public OAuth2AccessTokenDO getAccessToken(String accessToken) {
// 优先从 Redis 中获取 // // 优先从 Redis 中获取
OAuth2AccessTokenDO accessTokenDO = oauth2AccessTokenRedisDAO.get(accessToken); // OAuth2AccessTokenDO accessTokenDO = oauth2AccessTokenRedisDAO.get(accessToken);
if (accessTokenDO != null) { // if (accessTokenDO != null) {
return accessTokenDO; // return accessTokenDO;
} // }
//
// // 获取不到,从 MySQL 中获取
// accessTokenDO = oauth2AccessTokenMapper.selectByAccessToken(accessToken);
// // 如果在 MySQL 存在,则往 Redis 中写入
// if (accessTokenDO != null && !DateUtils.isExpired(accessTokenDO.getExpiresTime())) {
// oauth2AccessTokenRedisDAO.set(accessTokenDO);
// }
// 因数据库不在存入缓存数据,所以直接从缓存中获取
// 获取不到,从 MySQL 中获取 // 数据库移除令牌存入,所以直接从缓存中获取
accessTokenDO = oauth2AccessTokenMapper.selectByAccessToken(accessToken); OAuth2AccessTokenDO accessTokenDO = oauth2AccessTokenRedisDAO.get(accessToken);
// 如果在 MySQL 存在,则往 Redis 中写入
if (accessTokenDO != null && !DateUtils.isExpired(accessTokenDO.getExpiresTime())) { if(accessTokenDO != null){
oauth2AccessTokenRedisDAO.set(accessTokenDO); // 有令牌的校验,代表有接口访问,延长令牌的过期时间(30分钟)
oauth2AccessTokenRedisDAO.set(accessTokenDO.setExpiresTime(LocalDateTime.now().plusSeconds(1800)));
} }
return accessTokenDO; return accessTokenDO;
} }
@@ -111,9 +122,9 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
if (accessTokenDO == null) { if (accessTokenDO == null) {
throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "访问令牌不存在"); throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "访问令牌不存在");
} }
if (DateUtils.isExpired(accessTokenDO.getExpiresTime())) { // if (DateUtils.isExpired(accessTokenDO.getExpiresTime())) {
throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "访问令牌已过期"); // throw exception0(GlobalErrorCodeConstants.UNAUTHORIZED.getCode(), "访问令牌已过期");
} // }
return accessTokenDO; return accessTokenDO;
} }
@@ -136,7 +147,26 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
return oauth2AccessTokenMapper.selectPage(reqVO); 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()) OAuth2AccessTokenDO accessTokenDO = new OAuth2AccessTokenDO().setAccessToken(generateAccessToken())
.setUserId(refreshTokenDO.getUserId()).setUserType(refreshTokenDO.getUserType()) .setUserId(refreshTokenDO.getUserId()).setUserType(refreshTokenDO.getUserType())
.setClientId(clientDO.getClientId()).setScopes(refreshTokenDO.getScopes()) .setClientId(clientDO.getClientId()).setScopes(refreshTokenDO.getScopes())
@@ -147,25 +177,13 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
.setNickname(refreshTokenDO.getNickname()).setIsSupAdmin(refreshTokenDO.getIsSupAdmin()) .setNickname(refreshTokenDO.getNickname()).setIsSupAdmin(refreshTokenDO.getIsSupAdmin())
; ;
//accessTokenDO.setOrganId(OrganContextHolder.getOrganId()); // 手动设置组织编号,避免缓存到 Redis 的时候,无对应的组织编号 //accessTokenDO.setOrganId(OrganContextHolder.getOrganId()); // 手动设置组织编号,避免缓存到 Redis 的时候,无对应的组织编号
oauth2AccessTokenMapper.insert(accessTokenDO); // oauth2AccessTokenMapper.insert(accessTokenDO);
// 记录到 Redis 中 // 记录到 Redis 中
oauth2AccessTokenRedisDAO.set(accessTokenDO); oauth2AccessTokenRedisDAO.set(accessTokenDO);
return 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() { private static String generateAccessToken() {
return IdUtil.fastSimpleUUID(); return IdUtil.fastSimpleUUID();
@@ -4,14 +4,12 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.extra.spring.SpringUtil; 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.enums.CommonStatusEnum;
import com.cf.imes.framework.common.util.collection.CollectionUtils; import com.cf.imes.framework.common.util.collection.CollectionUtils;
import com.cf.imes.framework.datapermission.core.annotation.DataPermission; import com.cf.imes.framework.datapermission.core.annotation.DataPermission;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; 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.aop.OrganIgnore;
import com.cf.imes.framework.organ.core.context.OrganContextHolder; 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.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.system.api.permission.dto.DeptDataPermissionRespDTO; import com.cf.imes.module.system.api.permission.dto.DeptDataPermissionRespDTO;
import com.cf.imes.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO; 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.RoleMenuMapper;
import com.cf.imes.module.system.dal.mysql.permission.UserRoleMapper; 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.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.enums.permission.DataScopeEnum;
import com.cf.imes.module.system.service.dept.DeptService; import com.cf.imes.module.system.service.dept.DeptService;
import com.cf.imes.module.system.service.user.AdminUserService; 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.base.Suppliers;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching; import org.springframework.cache.annotation.Caching;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -72,6 +74,9 @@ public class PermissionServiceImpl implements PermissionService {
@Resource @Resource
private AdminUserService userService; private AdminUserService userService;
@Autowired
private RedisTemplate redisTemplate;
@Override @Override
public boolean hasAnyPermissions(Long userId, String... permissions) { public boolean hasAnyPermissions(Long userId, String... permissions) {
// 如果为空,说明已经有权限 // 如果为空,说明已经有权限
@@ -179,6 +184,16 @@ public class PermissionServiceImpl implements PermissionService {
if (CollUtil.isNotEmpty(deleteMenuIds)) { if (CollUtil.isNotEmpty(deleteMenuIds)) {
roleMenuMapper.deleteListByRoleIdAndMenuIds(roleId, 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 @Override
@@ -67,4 +67,5 @@ public interface ProcessService {
*/ */
List<ProcessDO> getAllProcess(); List<ProcessDO> getAllProcess();
List<ProcessDO> getUserProcess(Long userId);
} }
@@ -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);
}
} }