From 7d9b1b98bacf8adba1c274f72b9487266fe067ce Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Tue, 7 Apr 2026 16:52:29 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E7=BD=91=E5=85=B3?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9B=BA=E5=AE=9A=E6=8E=A5=E5=8F=A3=E4=B8=8D?= =?UTF-8?q?=E4=BC=A0token=E8=B0=83=E7=94=A8=EF=BC=8C=E6=96=B0=E5=A2=9Eigno?= =?UTF-8?q?reToken=E9=85=8D=E7=BD=AE=EF=BC=9B2=E3=80=81=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E4=B8=93=E7=94=A8=E5=8D=95=E6=9D=BF?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E3=80=81=E5=8D=95=E6=9D=BF=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gateway/config/CfGatewayProperties.java | 5 + .../security/TokenAuthenticationFilter.java | 50 ++++++++ .../gateway/util/SecurityFrameworkUtils.java | 19 +++ .../src/main/resources/application-local.yaml | 3 + .../admin/plate/PlateController.java | 14 +++ ...erPlateWechatMiniProgramCadInfoRespVO.java | 71 +++++++++++ .../OrderWechatMiniProgramCadInfoRespVO.java | 36 ++++++ .../executor/service/order/OrderService.java | 8 ++ .../service/order/OrderServiceImpl.java | 13 ++ .../service/orderbody/OrderBodyService.java | 21 ++++ .../orderbody/OrderBodyServiceImpl.java | 41 +++++++ .../ordercomponent/OrderComponentService.java | 2 +- .../OrderComponentServiceImpl.java | 9 +- .../executor/service/plate/PlateService.java | 16 +++ .../service/plate/PlateServiceImpl.java | 114 ++++++++++++++++++ .../src/main/resources/application-local.yaml | 2 + .../system/api/oauth2/OAuth2TokenApi.java | 7 ++ .../system/api/oauth2/OAuth2TokenApiImpl.java | 4 + .../service/oauth2/OAuth2TokenService.java | 7 ++ .../oauth2/OAuth2TokenServiceImpl.java | 5 + 20 files changed, 444 insertions(+), 3 deletions(-) create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderPlateWechatMiniProgramCadInfoRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderWechatMiniProgramCadInfoRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderbody/OrderBodyService.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderbody/OrderBodyServiceImpl.java diff --git a/cf-gateway/src/main/java/com/cf/imes/gateway/config/CfGatewayProperties.java b/cf-gateway/src/main/java/com/cf/imes/gateway/config/CfGatewayProperties.java index 5702d2210..87c1199d6 100644 --- a/cf-gateway/src/main/java/com/cf/imes/gateway/config/CfGatewayProperties.java +++ b/cf-gateway/src/main/java/com/cf/imes/gateway/config/CfGatewayProperties.java @@ -26,4 +26,9 @@ public class CfGatewayProperties { * 需要忽略打印requestBody和responseBody的请求地址列表 */ private Set accessLogIgnoreUrls = Collections.emptySet(); + + /** + * 需要忽略token的请求地址列表 + */ + private Set ignoreTokenUrls = Collections.emptySet(); } diff --git a/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/TokenAuthenticationFilter.java b/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/TokenAuthenticationFilter.java index 6e495d243..0b2d9eda7 100644 --- a/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/TokenAuthenticationFilter.java +++ b/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/TokenAuthenticationFilter.java @@ -1,21 +1,25 @@ package com.cf.imes.gateway.filter.security; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.ObjectUtil; import com.cf.imes.framework.common.exception.ErrorCode; import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.common.util.json.JsonUtils; +import com.cf.imes.gateway.config.CfGatewayProperties; import com.cf.imes.gateway.util.SecurityFrameworkUtils; import com.cf.imes.gateway.util.WebFrameworkUtils; import com.cf.imes.module.system.api.oauth2.OAuth2TokenApi; import com.cf.imes.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO; import com.fasterxml.jackson.core.type.TypeReference; +import jakarta.annotation.Resource; import org.springframework.cloud.client.loadbalancer.reactive.ReactorLoadBalancerExchangeFilterFunction; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; @@ -45,6 +49,13 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered { private static final TypeReference TOKEN_RESULT = new TypeReference() {}; + private static final TypeReference> IGNORE_TOKEN_SOURCE_RESULT + = new TypeReference<>() { + }; + + @Resource + private CfGatewayProperties cfGatewayProperties; + /** * 空的 LoginUser 的结果 * @@ -72,6 +83,24 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered { // 情况一,如果没有 Token 令牌,则直接继续 filter String token = SecurityFrameworkUtils.obtainAuthorization(exchange); if (CharSequenceUtil.isEmpty(token)) { + // 是否忽略token的外部请求,如小程序用 + AntPathMatcher pathMatcher = new AntPathMatcher(); + String url = exchange.getRequest().getURI().getPath(); + for (String ignoreUrl : cfGatewayProperties.getIgnoreTokenUrls()) { + if (pathMatcher.match(ignoreUrl, url)) { + return getIgnoreTokenSource() + .defaultIfEmpty("") + .flatMap(result -> { + String dataCode = buildSource(result); + LoginUser user = new LoginUser().setDataCode(dataCode); + ServerWebExchange newExchange = exchange.mutate() + .request(builder -> SecurityFrameworkUtils.setLoginUserHeader1(builder, user)) + .build(); + return chain.filter(newExchange); + }); + } + } + return chain.filter(exchange); } @@ -111,6 +140,12 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered { .retrieve().bodyToMono(String.class); } + private Mono getIgnoreTokenSource() { + return webClient.get() + .uri(OAuth2TokenApi.IGNORE_TOKEN_SOURCE_GET) + .retrieve().bodyToMono(String.class); + } + private LoginUser buildUser(String body) { CommonResult commonResult = JsonUtils.parseObject(body, TOKEN_RESULT); @@ -155,6 +190,21 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered { .setProductId(tokenInfo.getProductId()); } + /** + * 构建忽略令牌的数据源请求结果 + * + * @param body + * @return + */ + private String buildSource(String body) { + CommonResult commonResult = JsonUtils.parseObject(body, IGNORE_TOKEN_SOURCE_RESULT); + if (ObjectUtil.isNotNull(commonResult)) { + return commonResult.getData(); + } else { + return null; + } + } + @Override public int getOrder() { return -100; // 和 Spring Security Filter 的顺序对齐 diff --git a/cf-gateway/src/main/java/com/cf/imes/gateway/util/SecurityFrameworkUtils.java b/cf-gateway/src/main/java/com/cf/imes/gateway/util/SecurityFrameworkUtils.java index 0125a4fa8..cddc7eb01 100644 --- a/cf-gateway/src/main/java/com/cf/imes/gateway/util/SecurityFrameworkUtils.java +++ b/cf-gateway/src/main/java/com/cf/imes/gateway/util/SecurityFrameworkUtils.java @@ -124,4 +124,23 @@ public class SecurityFrameworkUtils { } } + /** + * 忽略令牌将 data-code 并设置到 请求头 + * + * @param builder 请求 + * @param user 用户 + */ + @SneakyThrows + public static void setLoginUserHeader1(ServerHttpRequest.Builder builder, LoginUser 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()); + } + } diff --git a/cf-gateway/src/main/resources/application-local.yaml b/cf-gateway/src/main/resources/application-local.yaml index 37ab95ab6..7986e4bff 100644 --- a/cf-gateway/src/main/resources/application-local.yaml +++ b/cf-gateway/src/main/resources/application-local.yaml @@ -21,6 +21,9 @@ logging: chenfeng: gateway: + ignore-token-urls: + - /admin-api/executor/plate/wechat/miniprogram/cadview/info/* + - /admin-api/executor/plate/wechat/miniprogram/cadview/order/info/* accessLogEnable: false access-log-ignore-urls: - /report/template diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java index 9234be0e1..f29ea99e2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java @@ -160,4 +160,18 @@ public class PlateController { public CommonResult getBodyViewPartCadInfo(@Validated @RequestBody OrderCadViewPlatePageReqVO orderCadViewPlatePageReqVO) { return success(plateService.getBodyViewPartCadInfo(orderCadViewPlatePageReqVO)); } + + @GetMapping("/wechat/miniprogram/cadview/info/{plateNo:[A-Fa-f0-9]{6}[A-Za-z0-9]{11}}") + @Operation(summary = "微信小程序根据板编号获取单板视图信息") + @Parameter(name = "plateNo", description = "板编号", required = true) + public CommonResult getPlateInfoByPlateNo(@PathVariable String plateNo) { + return success(plateService.getPlateInfoByPlateNo(plateNo)); + } + + @GetMapping("/wechat/miniprogram/cadview/order/info/{plateNo:[A-Fa-f0-9]{6}[A-Za-z0-9]{11}}") + @Operation(summary = "微信小程序根据板编号获取单板所属订单信息") + @Parameter(name = "plateNo", description = "板编号", required = true) + public CommonResult getOrderInfoByPlateNo(@PathVariable String plateNo) { + return success(plateService.getOrderInfoByPlateNo(plateNo)); + } } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderPlateWechatMiniProgramCadInfoRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderPlateWechatMiniProgramCadInfoRespVO.java new file mode 100644 index 000000000..780ef9200 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderPlateWechatMiniProgramCadInfoRespVO.java @@ -0,0 +1,71 @@ +package com.cf.imes.module.executor.controller.admin.plate.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * + * + * @author Gqr + * @since 2026/4/3 17:41 + */ +@Data +@Builder +@Schema(description = "管理后台 - 微信小程序 - 查看单板视图信息 Resp VO") +@JsonInclude(JsonInclude.Include.NON_NULL) +public class OrderPlateWechatMiniProgramCadInfoRespVO { + @Schema(description = "房间名称") + private String roomName; + + @Schema(description = "柜体名称") + private String bodyName; + + @Schema(description = "板编号") + private String plateNo; + + @Schema(description = "板名称") + private String plateName; + + @Schema(description = "自定义板编号") + private String customPlateNo; + + @Schema(description = "宽度") + private BigDecimal width; + + @Schema(description = "高度") + private BigDecimal height; + + @Schema(description = "厚度") + private BigDecimal thickness; + + @Schema(description = "左封边厚度") + private BigDecimal sealLeft; + + @Schema(description = "右封边厚度") + private BigDecimal sealRight; + + @Schema(description = "上封边厚度") + private BigDecimal sealUp; + + @Schema(description = "下封边厚度") + private BigDecimal sealDown; + + @Schema(description = "材质") + private String material; + + @Schema(description = "颜色") + private String color; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "CAD视图ID") + private Integer cadViewId; + + @Schema(description = "CAD视图文件ID") + private Long cadViewFileId; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderWechatMiniProgramCadInfoRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderWechatMiniProgramCadInfoRespVO.java new file mode 100644 index 000000000..cdb876264 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderWechatMiniProgramCadInfoRespVO.java @@ -0,0 +1,36 @@ +package com.cf.imes.module.executor.controller.admin.plate.vo; + +import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO; +import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO; +import com.cf.imes.module.executor.controller.admin.ordercomponent.vo.OrderComponentRespVO; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * + * + * @author Gqr + * @since 2026/4/7 14:54 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "管理后台 - 微信小程序 - 查看单板所属订单信息 Resp VO") +@JsonInclude(JsonInclude.Include.NON_NULL) +public class OrderWechatMiniProgramCadInfoRespVO { + @Schema(description = "订单信息") + private OrderRespVO order; + + @Schema(description = "订单柜体列表") + private List orderBodyList; + + @Schema(description = "订单部件列表") + private List orderComponentList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java index 3cff5fdcf..93df2a885 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java @@ -49,6 +49,14 @@ public interface OrderService { */ OrderDO getOrder(Long id); + /** + * 获得订单表 order_{N} + * + * @param id 编号 + * @return 订单表 order_{N} + */ + OrderDO getOrder(Long id, Long... organIds); + /** * 获得订单表 order_{N}分页 * diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java index 3b42ede22..8e0618a07 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java @@ -2,6 +2,7 @@ package com.cf.imes.module.executor.service.order; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; @@ -252,6 +253,18 @@ public class OrderServiceImpl implements OrderService { return orderMapper.selectOrderOne(id, getUserOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus()); } + @Override + public OrderDO getOrder(Long id, Long... organIds) { + Long userOrganId = SecurityFrameworkUtils.getUserOrganId(); + if (ObjectUtil.isNull(userOrganId) && ArrayUtil.isNotEmpty(organIds)) { + userOrganId = organIds[0]; + } + return orderMapper.selectOne(new LambdaQueryWrapper() + .eq(OrderDO::getId, id) + .eq(OrderDO::getOrganId, userOrganId) + .eq(OrderDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus())); + } + @Override public PageResult getOrderPage(OrderPageReqVO pageReqVO) { PageResult pageResult = orderMapper.selectPage(pageReqVO.setOrganId(getUserOrganId())); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderbody/OrderBodyService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderbody/OrderBodyService.java new file mode 100644 index 000000000..0114e6399 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderbody/OrderBodyService.java @@ -0,0 +1,21 @@ +package com.cf.imes.module.executor.service.orderbody; + +import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO; + +import java.util.List; + +/** + * 订单柜体 order_body_{N} Service 接口 + * + * @author Gqr + * @since 2026/4/7 15:27 + */ +public interface OrderBodyService { + /** + * 根据订单ID获取订单柜体列表 + * + * @param orderId 订单ID + * @return 订单柜体列表 + */ + List getOrderBodyList(Long orderId, Long... organIds); +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderbody/OrderBodyServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderbody/OrderBodyServiceImpl.java new file mode 100644 index 000000000..b8615570f --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderbody/OrderBodyServiceImpl.java @@ -0,0 +1,41 @@ +package com.cf.imes.module.executor.service.orderbody; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.cf.imes.framework.common.enums.DeletedCodeEnum; +import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; +import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO; +import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; +import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 订单柜体接口实现类 Service Impl + * + * @author Gqr + * @since 2026/4/7 15:28 + */ +@Service +public class OrderBodyServiceImpl implements OrderBodyService { + @Resource + private OrderBodyMapper orderBodyMapper; + + @Override + public List getOrderBodyList(Long orderId, Long... organIds) { + Long userOrganId = SecurityFrameworkUtils.getUserOrganId(); + if (ObjectUtil.isNull(userOrganId) && ArrayUtil.isNotEmpty(organIds)) { + userOrganId = organIds[0]; + } + List orderBodyDOS = orderBodyMapper.selectList(new LambdaQueryWrapper() + .eq(OrderBodyDO::getOrderId, orderId) + .eq(OrderBodyDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus()) + .eq(OrderBodyDO::getOrganId, userOrganId) + ); + return BeanUtil.copyToList(orderBodyDOS, OrderBodyRespVO.class); + } +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentService.java index 9569ad8eb..7c3b409ea 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentService.java @@ -78,7 +78,7 @@ public interface OrderComponentService { * @param orderIds * @return */ - List getOrderComponentListOnOrders(List orderIds); + List getOrderComponentListOnOrders(List orderIds, Long... organId); /** * 查询部件下所有子部件 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentServiceImpl.java index dd34645c8..5a810fc9d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/ordercomponent/OrderComponentServiceImpl.java @@ -2,6 +2,7 @@ package com.cf.imes.module.executor.service.ordercomponent; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -655,11 +656,15 @@ public class OrderComponentServiceImpl implements OrderComponentService { } @Override - public List getOrderComponentListOnOrders(List orderIds) { + public List getOrderComponentListOnOrders(List orderIds, Long... organIds) { + Long userOrganId = SecurityFrameworkUtils.getUserOrganId(); + if (ObjectUtil.isNull(userOrganId) && ArrayUtil.isNotEmpty(organIds)) { + userOrganId = organIds[0]; + } List orderComponentDOS = orderComponentMapper.selectList(new LambdaQueryWrapper() .in(OrderComponentDO::getOrderId, orderIds) .eq(OrderComponentDO::getDeleted, false) - .eq(OrderComponentDO::getOrganId, SecurityFrameworkUtils.getUserOrganId()) + .eq(OrderComponentDO::getOrganId, userOrganId) .select(OrderComponentDO::getId, OrderComponentDO::getName, OrderComponentDO::getPid)); return BeanUtil.copyToList(orderComponentDOS, OrderComponentRespVO.class); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateService.java index 13b27d0de..2d58764fc 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateService.java @@ -137,4 +137,20 @@ public interface PlateService { * @return */ OrdersViewCadViewInfoRespVO getBodyViewPartCadInfo(OrderCadViewPlatePageReqVO orderBodyPageRespVO); + + /** + * 根据板编号获取板件信息 + * + * @param plateNo + * @return + */ + OrderPlateWechatMiniProgramCadInfoRespVO getPlateInfoByPlateNo(String plateNo); + + /** + * 根据板编号获取订单信息 + * + * @param plateNo + * @return + */ + OrderWechatMiniProgramCadInfoRespVO getOrderInfoByPlateNo(String plateNo); } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java index 890da32f1..4dfb7a184 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java @@ -25,6 +25,7 @@ import com.cf.imes.framework.mybatis.core.query.QueryWrapperX; import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderCadViewPlatePageReqVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlanPlateNumAndAreaRespVO; +import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrdersViewCadViewInfoRespVO; import com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp; import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList; @@ -49,6 +50,10 @@ import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper; import com.cf.imes.module.executor.enums.OrderItemType; import com.cf.imes.module.executor.enums.OrderStatusEnum; import com.cf.imes.module.executor.service.order.OrderInputProcessor; +import com.cf.imes.module.executor.service.order.OrderService; +import com.cf.imes.module.executor.service.orderbody.OrderBodyService; +import com.cf.imes.module.executor.service.ordercomponent.OrderComponentService; +import com.cf.imes.module.system.api.organ.OrganApi; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -111,6 +116,18 @@ public class PlateServiceImpl implements PlateService { @Resource private IdentifierGenerator identifierGenerator; + @Resource + private OrganApi organApi; + + @Resource + private OrderService orderService; + + @Resource + private OrderBodyService orderBodyService; + + @Resource + private OrderComponentService orderComponentService; + private static final String FIELD_PLATE_ID = "plateId"; private static final String FIELD_OG_MATERIAL = "og.material"; private static final String FIELD_OG_BRAND = "og.brand"; @@ -958,4 +975,101 @@ public class PlateServiceImpl implements PlateService { ordersViewCadViewInfoRespVO.setParts(BeanUtil.copyToList(partRecords, OrderViewPartPageRespVO.class)); return ordersViewCadViewInfoRespVO; } + + @Override + public OrderPlateWechatMiniProgramCadInfoRespVO getPlateInfoByPlateNo(String plateNo) { + // 1、解析组织id,查询板件信息 + Integer organId = Integer.parseInt(plateNo.substring(0, 6), 16); + organApi.validOrgan(organId.longValue()).checkError(); + + PlateDO plateDO = plateMapper.selectOne(new LambdaQueryWrapper() + .eq(PlateDO::getOrganId, organId) + .eq(PlateDO::getPlateNo, plateNo.substring(6))); + + if (ObjectUtil.isNull(plateDO)) { + throw new ServiceException(PLATE_NOT_EXISTS); + } + Long orderId = plateDO.getOrderId(); + + // 2、根据板id查询明细 + List plateItemDOS = orderItemMapper.selectList(new LambdaQueryWrapper() + .eq(OrderItemDO::getPlateId, plateDO.getId()) + .eq(OrderItemDO::getOrganId, organId) + .eq(OrderItemDO::getOrderId, orderId) + ); + if (CollUtil.isEmpty(plateItemDOS)) { + throw new ServiceException(PLATE_NOT_EXISTS); + } + + // 3、查询柜体获取图纸id + OrderItemDO plateItemDO = plateItemDOS.get(0); + // 板件cad id + Integer cadViewId = plateItemDO.getCadViewId(); + OrderBodyDO orderBodyDO = orderBodyMapper.selectOne(new LambdaQueryWrapper() + .eq(OrderBodyDO::getOrderId, orderId) + .eq(OrderBodyDO::getId, plateItemDO.getBodyId()) + .eq(OrderBodyDO::getOrganId, organId) + ); + // 图纸id + Long cadViewFileId = orderBodyDO.getCadViewFileId(); + + // 4、查询材料内容 + GoodsDO goodsDO = goodsMapper.selectOne(new LambdaQueryWrapper() + .eq(GoodsDO::getOrderId, orderId) + .eq(GoodsDO::getId, plateDO.getGoodsId()) + .eq(GoodsDO::getOrganId, organId) + ); + + return OrderPlateWechatMiniProgramCadInfoRespVO + .builder() + .roomName(orderBodyDO.getRoomName()) + .bodyName(orderBodyDO.getName()) + .plateNo(plateDO.getPlateNo()) + .plateName(plateDO.getName()) + .width(plateDO.getWidth()) + .height(plateDO.getHeight()) + .thickness(plateDO.getThickness()) + .sealLeft(plateDO.getSealLeft()) + .sealRight(plateDO.getSealRight()) + .sealUp(plateDO.getSealUp()) + .sealDown(plateDO.getSealDown()) + .material(goodsDO.getMaterial()) + .color(goodsDO.getColor()) + .remark(plateDO.getRemark()) + .cadViewFileId(cadViewFileId) + .cadViewId(cadViewId) + .build(); + } + + @Override + public OrderWechatMiniProgramCadInfoRespVO getOrderInfoByPlateNo(String plateNo) { + OrderWechatMiniProgramCadInfoRespVO result = new OrderWechatMiniProgramCadInfoRespVO(); + // 1、解析组织id,查询板件信息 + Integer organId = Integer.parseInt(plateNo.substring(0, 6), 16); + Long organIdLong = organId.longValue(); + organApi.validOrgan(organId.longValue()).checkError(); + + PlateDO plateDO = plateMapper.selectOne(new LambdaQueryWrapper() + .eq(PlateDO::getOrganId, organIdLong) + .eq(PlateDO::getPlateNo, plateNo.substring(6))); + + if (ObjectUtil.isNull(plateDO)) { + throw new ServiceException(PLATE_NOT_EXISTS); + } + Long orderId = plateDO.getOrderId(); + + // 2、查询订单信息 + OrderDO order = orderService.getOrder(orderId, organIdLong); + if (ObjectUtil.isNull(order)) { + throw new ServiceException(ORDER_NOT_EXISTS); + } + result.setOrder(BeanUtil.copyProperties(order, OrderRespVO.class)); + + // 3、查询柜体信息 + result.setOrderBodyList(orderBodyService.getOrderBodyList(orderId, organIdLong)); + + // 4、查询部件信息 + result.setOrderComponentList(orderComponentService.getOrderComponentListOnOrders(List.of(orderId), organIdLong)); + return result; + } } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml index 3528fbe97..aa9e4df38 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml @@ -186,6 +186,8 @@ chenfeng: superadmin-prod-org-ignore-enable: false ignore-urls: - /rpc-api/** + - /admin-api/executor/plate/wechat/miniprogram/cadview/info/* + - /admin-api/executor/plate/wechat/miniprogram/cadview/order/info/* ignore-tables: env: # 多环境的配置项 diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApi.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApi.java index c37a9330c..dcd7bf2cf 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApi.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApi.java @@ -26,6 +26,9 @@ public interface OAuth2TokenApi { @SuppressWarnings("HttpUrlsUsage") String URL_CHECK = "http://" + ApiConstants.NAME + PREFIX + "/check"; + @SuppressWarnings("HttpUrlsUsage") + String IGNORE_TOKEN_SOURCE_GET = "http://" + ApiConstants.NAME + PREFIX + "/ignore/token/source"; + String URL_ORGAN = "http://" + ApiConstants.NAME + PREFIX + "/getOrganIdByToken"; @PostMapping(PREFIX + "/create") @@ -57,4 +60,8 @@ public interface OAuth2TokenApi { @Parameter(name = "accessToken", description = "访问令牌", required = true, example = "tudou") CommonResult getOrganIdByToken(@RequestParam("accessToken") String accessToken); + @GetMapping(PREFIX + "/ignore/token/source") + @Operation(summary = "请求忽略令牌数据源") + CommonResult getIgnoreTokenSource(); + } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApiImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApiImpl.java index 0312f14a1..f32554a55 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApiImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/oauth2/OAuth2TokenApiImpl.java @@ -64,4 +64,8 @@ public class OAuth2TokenApiImpl implements OAuth2TokenApi { return success(accessTokenDO.getOrganId()); } + @Override + public CommonResult getIgnoreTokenSource() { + return success(oauth2TokenService.getIgnoreTokenSource()); + } } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenService.java index 6acc06797..4e5b48e98 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenService.java @@ -72,6 +72,13 @@ public interface OAuth2TokenService { */ OAuth2AccessTokenDO checkAccessToken(String accessToken); + /** + * 获取忽略令牌的数据源 + * + * @return + */ + String getIgnoreTokenSource(); + /** * 移除访问令牌 * 注意:该流程中,会移除相关的刷新令牌 diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java index 223054939..c0d1bf401 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java @@ -176,6 +176,11 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService { return accessTokenDO; } + @Override + public String getIgnoreTokenSource() { + return useDataCode; + } + @Override public OAuth2AccessTokenDO removeAccessToken(String accessToken) { // 删除访问令牌