diff --git a/blade-auth/src/main/java/org/springblade/auth/handler/BladeAuthorizationHandler.java b/blade-auth/src/main/java/org/springblade/auth/handler/BladeAuthorizationHandler.java index 33d7f27e..c48d9a0a 100644 --- a/blade-auth/src/main/java/org/springblade/auth/handler/BladeAuthorizationHandler.java +++ b/blade-auth/src/main/java/org/springblade/auth/handler/BladeAuthorizationHandler.java @@ -25,10 +25,13 @@ */ package org.springblade.auth.handler; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.common.constant.TenantConstant; import org.springblade.core.launch.props.BladeProperties; +import org.springblade.core.log.logger.BladeLogger; import org.springblade.core.oauth2.exception.ExceptionCode; import org.springblade.core.oauth2.handler.AbstractAuthorizationHandler; import org.springblade.core.oauth2.props.OAuth2Properties; @@ -42,6 +45,10 @@ import org.springblade.core.tool.utils.DesUtil; import org.springblade.core.tool.utils.SM2Util; import org.springblade.system.cache.SysCache; import org.springblade.system.pojo.entity.Tenant; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import java.util.Date; import java.util.List; @@ -59,6 +66,8 @@ public class BladeAuthorizationHandler extends AbstractAuthorizationHandler { private final BladeTenantProperties tenantProperties; private final OAuth2Properties oAuth2Properties; private final BladeLockHandler lockHandler; + @Resource + private RedisTemplate redisTemplate; /** * 自定义弱密码列表 @@ -134,10 +143,44 @@ public class BladeAuthorizationHandler extends AbstractAuthorizationHandler { public void authSuccessful(OAuth2User user, OAuth2Request request) { // 处理认证成功,清空错误次数 lockHandler.handleAuthSuccess(user.getTenantId(), user.getAccount()); - + // 更新 Redis 登录统计 + updateUserLoginStats(user); log.info("用户:{},认证成功", user.getAccount()); } + /** + * 更新用户登录统计信息到 Redis + */ + private void updateUserLoginStats(OAuth2User user) { + // 获取用户ID + String userId = user.getUserId(); + // 获取用户名 + String username = user.getName(); + String key = "user:login:" + userId; + // 获取登录IP + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + String loginIp = request.getRemoteAddr(); + // 获取部门ID(假设 user 对象提供 getDeptId 方法) + String deptId = user.getDeptId(); + // 获取 Redis 操作对象 + HashOperations hashOps = redisTemplate.opsForHash(); + // 1. 更新用户名(可选,若用户名可能变更) + hashOps.put(key, "username", username); + // 2. 存储登录IP + hashOps.put(key, "loginIp", loginIp); + // 3. 存储部门ID + hashOps.put(key, "deptId", deptId); + // 4. 更新最后一次登录时间 + long lastLoginTime = System.currentTimeMillis(); + hashOps.put(key, "lastLoginTime", lastLoginTime); + // 新增:登录次数递增 + Object countObj = hashOps.get(key, "loginCount"); + long loginCount = 1; + if (countObj != null) { + loginCount = (Long) countObj + 1; + } + hashOps.put(key, "loginCount", loginCount); + } /** * 认证失败回调 * diff --git a/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogApiController.java b/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogApiController.java index 5ba1d79f..0e09ccb6 100644 --- a/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogApiController.java +++ b/blade-ops/blade-log/src/main/java/org/springblade/core/log/controller/LogApiController.java @@ -30,6 +30,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.v3.oas.annotations.Parameter; import lombok.AllArgsConstructor; import org.springblade.core.log.model.LogApi; +import org.springblade.core.log.pojo.dto.UserLoginStatsDTO; import org.springblade.core.log.pojo.vo.LogApiVO; import org.springblade.core.log.service.ILogApiService; import org.springblade.core.log.wrapper.LogApiWrapper; @@ -38,12 +39,13 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.secure.annotation.IsAdmin; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; +import org.springframework.data.redis.core.HashOperations; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.util.Map; +import java.util.*; /** * 控制器 @@ -77,4 +79,15 @@ public class LogApiController { return R.data(LogApiWrapper.build().pageVO(pages)); } + @IsAdmin + @GetMapping("/listUserLoginStatus") + public R> getUserLoginStats( + @RequestParam(required = false) String username, + @RequestParam(required = false) String deptId + ) { + // 获取所有 user:login:* 键 + List result = logService.getUserLoginStats(username, deptId); + return R.data(result); + } + } diff --git a/blade-ops/blade-log/src/main/java/org/springblade/core/log/pojo/dto/UserLoginStatsDTO.java b/blade-ops/blade-log/src/main/java/org/springblade/core/log/pojo/dto/UserLoginStatsDTO.java new file mode 100644 index 00000000..9f28a8ea --- /dev/null +++ b/blade-ops/blade-log/src/main/java/org/springblade/core/log/pojo/dto/UserLoginStatsDTO.java @@ -0,0 +1,44 @@ +package org.springblade.core.log.pojo.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * @author 石玖洲 + * @Description + * @create 2026-02-27 14:15 + */ +@Data +@AllArgsConstructor +public class UserLoginStatsDTO { + + /** + * 用户ID + */ + private String userId; + + /** + * 用户名 + */ + private String username; + + /** + * 登录IP + */ + private String loginIp; + + /** + * 部门ID + */ + private String deptId; + + /** + * 最后一次登录时间 + */ + private Long lastLoginTime; + + /** + * 登录次数 + */ + private Long loginCount; +} diff --git a/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogApiService.java b/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogApiService.java index 08cf39a8..95d79b4c 100644 --- a/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogApiService.java +++ b/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/ILogApiService.java @@ -27,6 +27,9 @@ package org.springblade.core.log.service; import com.baomidou.mybatisplus.extension.service.IService; import org.springblade.core.log.model.LogApi; +import org.springblade.core.log.pojo.dto.UserLoginStatsDTO; + +import java.util.List; /** * 服务类 @@ -35,4 +38,11 @@ import org.springblade.core.log.model.LogApi; */ public interface ILogApiService extends IService { + /** + * 获取用户登录状态 + * @param username 用户名 + * @param deptId 部门ID + * @return 用户登录状态列表 + */ + List getUserLoginStats(String username, String deptId); } diff --git a/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogApiServiceImpl.java b/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogApiServiceImpl.java index c3c0de68..1fb6cdbe 100644 --- a/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogApiServiceImpl.java +++ b/blade-ops/blade-log/src/main/java/org/springblade/core/log/service/impl/LogApiServiceImpl.java @@ -26,11 +26,19 @@ package org.springblade.core.log.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import org.springblade.core.log.controller.LogApiController; import org.springblade.core.log.mapper.LogApiMapper; import org.springblade.core.log.model.LogApi; +import org.springblade.core.log.pojo.dto.UserLoginStatsDTO; import org.springblade.core.log.service.ILogApiService; +import org.springblade.core.tool.api.R; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import java.util.*; + /** * 服务实现类 * @@ -39,5 +47,41 @@ import org.springframework.stereotype.Service; @Service public class LogApiServiceImpl extends ServiceImpl implements ILogApiService { + @Resource + private RedisTemplate redisTemplate; + @Override + public List getUserLoginStats(String username, String deptId) { + Set keys = redisTemplate.keys("user:login:*"); + if (keys == null || keys.isEmpty()) { + new ArrayList<>(); + } + // 获取用户登录信息(带筛选) + List result = new ArrayList<>(); + for (String key : Objects.requireNonNull(keys)) { + HashOperations hashOps = redisTemplate.opsForHash(); + String userId = key.replace("user:login:", ""); + String currentUsername = (String) hashOps.get(key, "username"); + String currentDeptId = (String) hashOps.get(key, "deptId"); + Long loginCount = (Long) hashOps.get(key, "loginCount"); + // 过滤条件:根据 username 和 deptId 筛选 + boolean matchUsername = username == null || currentUsername != null && currentUsername.contains(username); + boolean matchDept = deptId == null || currentDeptId != null && currentDeptId.equals(deptId); + if (matchUsername && matchDept) { + String loginIp = (String) hashOps.get(key, "loginIp"); + Long lastLoginTime = (Long) hashOps.get(key, "lastLoginTime"); + if (currentUsername != null && loginIp != null && lastLoginTime != null) { + result.add(new UserLoginStatsDTO( + userId, + currentUsername, + loginIp, + currentDeptId, + lastLoginTime, + loginCount + )); + } + } + } + return result; + } } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataPartClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataPartClientFallback.java index f3465df9..2394e6b7 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataPartClientFallback.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataPartClientFallback.java @@ -1,8 +1,6 @@ package org.springblade.erpdata.feign; -import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.tool.api.R; -import org.springblade.erpdata.pojo.dto.AllocationDTO; import org.springframework.stereotype.Component; /** diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataSearchClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataSearchClient.java deleted file mode 100644 index 0ad8f560..00000000 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataSearchClient.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * BladeX Commercial License Agreement - * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. - *

- * Use of this software is governed by the Commercial License Agreement - * obtained after purchasing a license from BladeX. - *

- * 1. This software is for development use only under a valid license - * from BladeX. - *

- * 2. Redistribution of this software's source code to any third party - * without a commercial license is strictly prohibited. - *

- * 3. Licensees may copyright their own code but cannot use segments - * from this software for such purposes. Copyright of this software - * remains with BladeX. - *

- * Using this software signifies agreement to this License, and the software - * must not be used for illegal purposes. - *

- * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is - * not liable for any claims arising from secondary or illegal development. - *

- * Author: Chill Zhuang (bladejava@qq.com) - */ -package org.springblade.erpdata.feign; - - -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springblade.core.launch.constant.AppConstant; -import org.springblade.core.tool.api.R; -import org.springblade.erpdata.pojo.dto.AllocationDTO; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.PostMapping; - -/** - * Feign接口类 - * - * @author Chill - */ -@FeignClient( - value = AppConstant.APPLICATION_SYSTEM_NAME, - fallback = IErpDataSearchClientFallback.class -) -public interface IErpDataSearchClient { - - String API_PREFIX = "/feign/erpdata/client"; - String PAGE_ALLOCATION = API_PREFIX + "/pageAllocation"; - - /** - * 查询烧结配套信息 - * - * @param page - * @param entity - * @return - */ - @PostMapping(PAGE_ALLOCATION) - R> pageAllocation(IPage page, AllocationDTO entity); - -} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataSearchClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataSearchClientFallback.java deleted file mode 100644 index 3d09df03..00000000 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataSearchClientFallback.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.springblade.erpdata.feign; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springblade.core.tool.api.R; -import org.springblade.erpdata.pojo.dto.AllocationDTO; -import org.springframework.stereotype.Component; - -/** - * Feign失败配置 - * - * @author lqk - * @date 2025-12-17 15:13 - */ -@Component -public class IErpDataSearchClientFallback implements IErpDataSearchClient { - - @Override - public R> pageAllocation(IPage page, AllocationDTO entity) { - return R.fail("获取数据失败"); - } -} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPkpqryClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPkpqryClient.java new file mode 100644 index 00000000..611a154e --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPkpqryClient.java @@ -0,0 +1,43 @@ +package org.springblade.erpdata.feign; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.launch.constant.AppConstant; +import org.springblade.core.tool.api.R; +import org.springblade.erpdata.pojo.dto.MesRbPkpqryDTO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * Feign接口类 + * + * @author liuqingkun + */ +@FeignClient( + value = AppConstant.APPLICATION_SYSTEM_NAME, + fallback = IErpMesRbPkpqryClientFallback.class +) +public interface IErpMesRbPkpqryClient { + + String API_PREFIX = "/feign/erpdata/mesRbPkpqry/"; + String SELECT_PAGE = API_PREFIX + "selectPage"; + + /** + * 查询配置结果 + * + * @param current 分页参数 + * @param size 分页参数 + * @param pkno 配套单号 + * @param prtmdept 主制部门 + * @param subpkdateStart 配套开始时间 + * @param subpkdateEnd 配套结束时间 + * @return + */ + @GetMapping(SELECT_PAGE) + R> selectPage(@RequestParam(value = "current", required = false, defaultValue = "1") Integer current, + @RequestParam(value = "size", required = false, defaultValue = "10") Integer size, + @RequestParam(value = "pkno", required = false) String pkno, + @RequestParam(value = "prtmdept", required = false) String prtmdept, + @RequestParam(value = "subpkdateStart", required = false) String subpkdateStart, + @RequestParam(value = "subpkdateEnd", required = false) String subpkdateEnd); +} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPkpqryClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPkpqryClientFallback.java new file mode 100644 index 00000000..ef37d763 --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpMesRbPkpqryClientFallback.java @@ -0,0 +1,19 @@ +package org.springblade.erpdata.feign; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.tool.api.R; +import org.springblade.erpdata.pojo.dto.MesRbPkpqryDTO; + +/** + * Feign接口类 + * + * @author liuqingkun + */ +public class IErpMesRbPkpqryClientFallback implements IErpMesRbPkpqryClient { + + @Override + public R> selectPage(Integer current, Integer size, String pkno, String prtmdept, String subpkdateStart, String subpkdateEnd) { + return R.fail("获取数据失败"); + } +} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpPartoplinkFirseqClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpPartoplinkFirseqClient.java new file mode 100644 index 00000000..50eced21 --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpPartoplinkFirseqClient.java @@ -0,0 +1,34 @@ +package org.springblade.erpdata.feign; + + +import org.springblade.core.launch.constant.AppConstant; +import org.springblade.core.tool.api.R; +import org.springblade.erpdata.pojo.dto.PartoplinkFirseqDTO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +import java.util.List; + +/** + * Feign接口类 + * + * @author liuqingkun + */ +@FeignClient( + value = AppConstant.APPLICATION_SYSTEM_NAME, + fallback = IErpPartoplinkFirseqClientFallback.class +) +public interface IErpPartoplinkFirseqClient { + + String API_PREFIX = "/feign/erpdata/partoplinkFirseq/"; + String LIST_BY_PART_CODE = API_PREFIX + "listByPartCode"; + + /** + * 根据物料号查询一级工序 + * + * @param partCode + * @return + */ + @GetMapping(LIST_BY_PART_CODE) + R> listByPartCode(String partCode); +} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpPartoplinkFirseqClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpPartoplinkFirseqClientFallback.java new file mode 100644 index 00000000..fb589c66 --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpPartoplinkFirseqClientFallback.java @@ -0,0 +1,20 @@ +package org.springblade.erpdata.feign; + + +import org.springblade.core.tool.api.R; +import org.springblade.erpdata.pojo.dto.PartoplinkFirseqDTO; + +import java.util.List; + +/** + * Feign接口类 + * + * @author liuqingkun + */ +public class IErpPartoplinkFirseqClientFallback implements IErpPartoplinkFirseqClient { + + @Override + public R> listByPartCode(String partCode) { + return R.fail("获取数据失败"); + } +} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/AllocationDTO.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/AllocationDTO.java deleted file mode 100644 index a3740c33..00000000 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/AllocationDTO.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.springblade.erpdata.pojo.dto; - -import lombok.Data; - -import java.io.Serializable; - -/** - * 配套信息查询 - * - * @author lqk - */ -@Data -public class AllocationDTO implements Serializable { - - /** - * 配套单号 - */ - private String pkno; - /** - * 父件号 - */ - private String prntno; - /** - * 型号 - */ - private String mtltmrk; - /** - * 生产标识 - */ - private String prtlotno; - /** - * 需求日期 - */ - private String pkreqdat; - /** - * 父件批次 - */ - private String fjSplcode; - /** - * 父件配套数 - */ - private String fjPkavqty; - /** - * 配套序号 - */ - private String serialno; - /** - * 主制部门 - */ - private String prtmdept; - /** - * 计划标记 - */ - private String plnsign; - /** - * 制造订单号 - */ - private String mono; - /** - * 计划员 - */ - private String schemer; - /** - * 调度员 - */ - private String planner1; - /** - * 配套日期 - */ - private String subpkdate; - - /** - * 保管员 - */ - private String warctlr; - /** - * 条码序号 - */ - private String barcodeno; - /** - * 计划部门 - */ - private String plandept; - /** - * 备注 - */ - private String remark; - /** - * 物料标识 - */ - private String prtclass; -} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/MesRbPkpqryDTO.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/MesRbPkpqryDTO.java new file mode 100644 index 00000000..a5df8921 --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/MesRbPkpqryDTO.java @@ -0,0 +1,129 @@ +package org.springblade.erpdata.pojo.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author liuqingkun + */ +@Data +@NoArgsConstructor +public class MesRbPkpqryDTO { + /** + * 配套单号 + */ + @Schema(description = "配套单号") + @TableField("pkno") + private String pkno; + /** + * 父件号 + */ + @Schema(description = "父件号") + @TableField("prntno") + private String prntno; + /** + * 型号 + */ + @Schema(description = "型号") + @TableField("mtltmrk") + private String mtltmrk; + /** + * 生产标识 + */ + @Schema(description = "生产标识") + @TableField("prtlotno") + private String prtlotno; + /** + * 需求日期 + */ + @Schema(description = "需求日期") + @TableField("pkreqdat") + private String pkreqdat; + /** + * 父件批次 + */ + @Schema(description = "父件批次") + @TableField("fj_splcode") + private String fjSplcode; + /** + * 父件配套数 + */ + @Schema(description = "父件配套数") + @TableField("fj_pkavqty") + private String fjPkavqty; + /** + * 配套序号 + */ + @Schema(description = "配套序号") + @TableField("serialno") + private String serialno; + /** + * 主制部门 + */ + @Schema(description = "主制部门") + @TableField("prtmdept") + private String prtmdept; + /** + * 计划标记 + */ + @Schema(description = "计划标记") + @TableField("plnsign") + private String plnsign; + /** + * 制造订单号 + */ + @Schema(description = "制造订单号") + @TableField("mono") + private String mono; + /** + * 计划员 + */ + @Schema(description = "计划员") + @TableField("schemer") + private String schemer; + /** + * 调度员 + */ + @Schema(description = "调度员") + @TableField("planner1") + private String planner1; + /** + * 配套日期 + */ + @Schema(description = "配套日期") + @TableField("subpkdate") + private String subpkdate; + + /** + * 保管员 + */ + @Schema(description = "保管员") + @TableField("warctlr") + private String warctlr; + /** + * 条码序号 + */ + @Schema(description = "条码序号") + @TableField("barcodeno") + private String barcodeno; + /** + * 计划部门 + */ + @Schema(description = "计划部门") + @TableField("plandept") + private String plandept; + /** + * 备注 + */ + @Schema(description = "备注") + @TableField("remark") + private String remark; + /** + * 物料标识 + */ + @Schema(description = "物料标识") + @TableField("prtclass") + private String prtclass; +} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/PartoplinkFirseqDTO.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/PartoplinkFirseqDTO.java new file mode 100644 index 00000000..f0f3f7fa --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/PartoplinkFirseqDTO.java @@ -0,0 +1,48 @@ +package org.springblade.erpdata.pojo.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author liuqingkun + */ +@Data +@NoArgsConstructor +public class PartoplinkFirseqDTO { + /** + * 零件号 + */ + @Schema(description = "零件号") + private String partcode; + /** + * 零件名称 + */ + @Schema(description = "零件名称") + private String partname; + /** + * 一级工艺计划(A)号 + */ + @Schema(description = "一级工艺计划(A)号") + private String firpp; + /** + * 一级工艺计划名称 + */ + @Schema(description = "一级工艺计划名称") + private String firppname; + /** + * 一级工序 + */ + @Schema(description = "一级工序") + private String firseq; + /** + * 一级工序名称 + */ + @Schema(description = "一级工序名称") + private String firseqname; + /** + * 一级工序序号 + */ + @Schema(description = "一级工序序号") + private String firseqno; +} diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java index 0f41ac6d..0bd714cf 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java @@ -274,9 +274,6 @@ public class WorkPlanEntity extends BaseEntity { */ private String factTeamMembers; - /** - * 零件号 - */ - private String partCode; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java index 2fa64a6b..7f0c8301 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; -import org.springblade.core.mp.support.Condition; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.SpringUtil; @@ -17,8 +16,6 @@ import org.springblade.desk.dashboard.pojo.entity.*; import org.springblade.desk.dashboard.pojo.vo.*; import org.springblade.desk.dashboard.service.*; import org.springblade.erpdata.feign.IErpDataPartClient; -import org.springblade.erpdata.feign.IErpDataSearchClient; -import org.springblade.erpdata.pojo.dto.AllocationDTO; import org.springblade.system.feign.IUserClient; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldPlanController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldPlanController.java index 5e9bf1f6..ff9f0b2e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldPlanController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldPlanController.java @@ -15,14 +15,13 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; -import org.springblade.core.tool.utils.SpringUtil; import org.springblade.desk.order.pojo.entity.YieldPlan; import org.springblade.desk.order.pojo.enums.YieldPlanEnum; import org.springblade.desk.order.pojo.vo.YieldPlanVo; import org.springblade.desk.order.service.IYieldPlanService; import org.springblade.desk.order.wrapper.YieldPlanWrapper; -import org.springblade.erpdata.feign.IErpDataSearchClient; -import org.springblade.erpdata.pojo.dto.AllocationDTO; +import org.springblade.erpdata.feign.IErpMesRbPkpqryClient; +import org.springblade.erpdata.pojo.dto.MesRbPkpqryDTO; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -40,14 +39,7 @@ public class YieldPlanController extends BladeController { private final IYieldPlanService yieldPlanService; - private static IErpDataSearchClient erpDataSearchClient; - - private static IErpDataSearchClient getErpDataSearchClient() { - if (erpDataSearchClient == null) { - erpDataSearchClient = SpringUtil.getBean(IErpDataSearchClient.class); - } - return erpDataSearchClient; - } + private final IErpMesRbPkpqryClient mesRbPkpqryClient; /** * 分页查询列表-电镀 @@ -186,18 +178,21 @@ public class YieldPlanController extends BladeController { /** * 分页查询配套信息 * - * @param entity + * @param pkno + * @param prtmdept + * @param subpkdateStart + * @param subpkdateEnd * @param query * @return */ @GetMapping("/pageAllocation") - @Parameters({ - @Parameter(name = "ypCode", description = "计划单号", in = ParameterIn.QUERY, schema = @Schema(type = "string")), - @Parameter(name = "partCode", description = "零件号", in = ParameterIn.QUERY, schema = @Schema(type = "string")) - }) @Operation(summary = "分页查询配套信息", description = "") - public R> pageAllocation(@Parameter(hidden = true) AllocationDTO entity, Query query) { - R> result = getErpDataSearchClient().pageAllocation(Condition.getPage(query), entity); + public R> pageAllocation(@Parameter(description = "配套单号", required = false) @RequestParam String pkno, + @Parameter(description = "主制部门", required = false) @RequestParam String prtmdept, + @Parameter(description = "配套开始时间", required = false) @RequestParam String subpkdateStart, + @Parameter(description = "配套结束时间", required = false) @RequestParam String subpkdateEnd, + Query query) { + R> result = mesRbPkpqryClient.selectPage(query.getCurrent(), query.getSize(), pkno, prtmdept, subpkdateStart, subpkdateEnd); return result; } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java index c119a4f8..5238b84f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java @@ -9,6 +9,8 @@ import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.api.ResultCode; import org.springblade.core.tool.utils.ObjectUtil; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.dashboard.service.IDsPartService; @@ -19,12 +21,15 @@ import org.springblade.desk.order.pojo.enums.YieldPlanEnum; import org.springblade.desk.order.pojo.vo.LineMemoVo; import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.order.service.IYieldPlanService; +import org.springblade.erpdata.feign.IErpPartoplinkFirseqClient; +import org.springblade.erpdata.pojo.dto.PartoplinkFirseqDTO; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * 服务实现类 @@ -79,11 +84,19 @@ public class YieldPlanServiceImpl extends BaseServiceImpl getFirstProcess(String partCode) { List resultList = new ArrayList<>(); - //TODO 根据物料号, 调用ERP方法查询一级工序 - // select * from dba_mgr.v_partoplink_firseq@erp_mes_link a where prtno=:partCode + + // 根据物料号, 调用ERP方法查询一级工序 + R> result = partoplinkFirseqClient.listByPartCode(partCode); + if (ResultCode.SUCCESS.getCode() == result.getCode()) { + resultList = result.getData().stream() + .map(item -> JSONObject.parseObject(JSONObject.toJSONString(item))) + .collect(Collectors.toList()); + } return resultList; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/process/controller/FmProjectApplicationController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/process/controller/FmProjectApplicationController.java index bcf09a40..d43202d5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/process/controller/FmProjectApplicationController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/process/controller/FmProjectApplicationController.java @@ -40,6 +40,7 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.annotation.IsAdmin; +import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; @@ -50,6 +51,8 @@ import org.springblade.desk.process.pojo.vo.FmProjectApplicationVO; import org.springblade.desk.process.service.IFmProjectApplicationService; import org.springblade.desk.process.service.IFmProjectMilestoneService; import org.springblade.desk.process.wrapper.FmProjectApplicationWrapper; +import org.springblade.system.feign.IUserClient; +import org.springblade.system.pojo.entity.User; import org.springframework.web.bind.annotation.*; import java.text.SimpleDateFormat; @@ -73,6 +76,8 @@ public class FmProjectApplicationController extends BladeController { private final IFmProjectMilestoneService fmProjectMilestoneService; + private final IUserClient userClient; + /** * 项目管理 详情 */ @@ -145,6 +150,9 @@ public class FmProjectApplicationController extends BladeController { if(fmProjectApplication.getTouchingTime()==null){ fmProjectApplication.setTouchingTime(new Date()); } + BladeUser bladeUser = AuthUtil.getUser(); + User user = userClient.userInfoById(bladeUser.getUserId()).getData(); + fmProjectApplication.setTouchingMan(user.getRealName()); Boolean flag=fmProjectApplicationService.saveOrUpdate(fmProjectApplication); if(flag){ List stoneList=fmProjectApplication.getStoneList(); diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataPartClient.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataPartClient.java index 389c2455..c73dc452 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataPartClient.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataPartClient.java @@ -1,15 +1,10 @@ package org.springblade.erpdata.feign; -import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.v3.oas.annotations.Hidden; import lombok.AllArgsConstructor; -import org.springblade.common.exception.BusinessException; import org.springblade.core.tenant.annotation.NonDS; -import org.springblade.core.tool.api.R; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; -import org.springblade.erpdata.pojo.dto.AllocationDTO; -import org.springblade.erpdata.service.IErpDataSearchService; import org.springblade.erpdata.service.IErpPartService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataSearchClient.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataSearchClient.java deleted file mode 100644 index 10298ec4..00000000 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataSearchClient.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.springblade.erpdata.feign; - - -import com.baomidou.mybatisplus.core.metadata.IPage; -import io.swagger.v3.oas.annotations.Hidden; -import lombok.AllArgsConstructor; -import org.springblade.core.tenant.annotation.NonDS; -import org.springblade.core.tool.api.R; -import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; -import org.springblade.erpdata.pojo.dto.AllocationDTO; -import org.springblade.erpdata.service.IErpDataSearchService; -import org.springblade.erpdata.service.IErpPartService; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - - -/** - * 字典服务Feign实现类 - * - * @author Chill - */ -@NonDS -@Hidden -@RestController -@AllArgsConstructor -public class ErpDataSearchClient implements IErpDataSearchClient{ - - private final IErpDataSearchService dataSearchService; - - @Override - @GetMapping(PAGE_ALLOCATION) - public R> pageAllocation(IPage page, AllocationDTO entity) { - return R.data(dataSearchService.queryAllocation(page, entity)); - } -} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpMesRbPkpqryClient.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpMesRbPkpqryClient.java new file mode 100644 index 00000000..223b7828 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpMesRbPkpqryClient.java @@ -0,0 +1,38 @@ +package org.springblade.erpdata.feign; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.v3.oas.annotations.Hidden; +import lombok.AllArgsConstructor; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tenant.annotation.NonDS; +import org.springblade.core.tool.api.R; +import org.springblade.erpdata.pojo.dto.MesRbPkpqryDTO; +import org.springblade.erpdata.service.IErpMesRbPkpqryService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + + +/** + * 字典服务Feign实现类 + * + * @author liuqingkun + */ +@NonDS +@Hidden +@RestController +@AllArgsConstructor +public class ErpMesRbPkpqryClient implements IErpMesRbPkpqryClient { + + private final IErpMesRbPkpqryService mesRbPkpqryService; + + @GetMapping(SELECT_PAGE) + @Override + public R> selectPage(Integer current, Integer size, String pkno, String prtmdept, String subpkdateStart, String subpkdateEnd) { + Query query = new Query(); + query.setCurrent(current); + query.setSize(size); + return R.data(mesRbPkpqryService.page(Condition.getPage(query), pkno, prtmdept, subpkdateStart, subpkdateEnd)); + } +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpPartoplinkFirseqClient.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpPartoplinkFirseqClient.java new file mode 100644 index 00000000..bcb504a4 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpPartoplinkFirseqClient.java @@ -0,0 +1,35 @@ +package org.springblade.erpdata.feign; + + +import io.swagger.v3.oas.annotations.Hidden; +import lombok.AllArgsConstructor; +import org.springblade.core.tenant.annotation.NonDS; +import org.springblade.core.tool.api.R; +import org.springblade.erpdata.pojo.dto.PartoplinkFirseqDTO; +import org.springblade.erpdata.service.IErpPartoplinkFirseqService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + + +/** + * 字典服务Feign实现类 + * + * @author liuqingkun + */ +@NonDS +@Hidden +@RestController +@AllArgsConstructor +public class ErpPartoplinkFirseqClient implements IErpPartoplinkFirseqClient { + + private final IErpPartoplinkFirseqService partoplinkFirseqService; + + @GetMapping(LIST_BY_PART_CODE) + @Override + public R> listByPartCode(String partCode) { + List dataList = partoplinkFirseqService.listByPartCode(partCode); + return R.data(dataList); + } +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataSearchMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataSearchMapper.java deleted file mode 100644 index 1d2c31c4..00000000 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataSearchMapper.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.springblade.erpdata.mapper; - -import com.baomidou.mybatisplus.core.mapper.Mapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springblade.erpdata.pojo.dto.AllocationDTO; -import org.springblade.erpdata.pojo.dto.view.MesRbWo; - -import java.util.List; - -/** - * Mapper 接口 - * - * @author lqk - */ -public interface ErpDataSearchMapper extends Mapper { - /** - * 查询烧结配套信息 - * - * @param page - * @return - */ - List queryAllocation(IPage page); - - /** - * 从ERP视图中获取要同步的生产计划 - * - * @return - */ - List getYieldPlanErpList(); -} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataSearchMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataSearchMapper.xml deleted file mode 100644 index 5448e43f..00000000 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataSearchMapper.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkpqryMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkpqryMapper.java new file mode 100644 index 00000000..c5512a9a --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkpqryMapper.java @@ -0,0 +1,27 @@ +package org.springblade.erpdata.mapper; + +import com.baomidou.mybatisplus.core.mapper.Mapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.erpdata.pojo.dto.MesRbPkpqryDTO; + +import java.util.List; + +/** + * Mapper 接口 + * + * @author lqk + */ +public interface ErpMesRbPkpqryMapper extends Mapper { + + /** + * 自定义分页 - 查询配置结果 + * + * @param page 分页参数 + * @param pkno 配套单号 + * @param prtmdept 主制部门 + * @param subpkdateStart 配套开始时间 + * @param subpkdateEnd 配套结束时间 + * @return + */ + List selectPage(IPage page, String pkno, String prtmdept, String subpkdateStart, String subpkdateEnd); +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkpqryMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkpqryMapper.xml new file mode 100644 index 00000000..cb5cb242 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbPkpqryMapper.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartoplinkFirseqMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartoplinkFirseqMapper.java new file mode 100644 index 00000000..e5c457d9 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartoplinkFirseqMapper.java @@ -0,0 +1,22 @@ +package org.springblade.erpdata.mapper; + +import com.baomidou.mybatisplus.core.mapper.Mapper; +import org.springblade.erpdata.pojo.dto.PartoplinkFirseqDTO; + +import java.util.List; + +/** + * Mapper 接口 + * + * @author lqk + */ +public interface ErpPartoplinkFirseqMapper extends Mapper { + + /** + * 根据物料号查询一级工序 + * + * @param partCode + * @return + */ + List listByPartCode(String partCode); +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartoplinkFirseqMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartoplinkFirseqMapper.xml new file mode 100644 index 00000000..26429d94 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartoplinkFirseqMapper.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataSearchService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataSearchService.java deleted file mode 100644 index d2275156..00000000 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataSearchService.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.springblade.erpdata.service; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springblade.erpdata.pojo.dto.AllocationDTO; - -/** - * ERP数据查询service - * - * @author lqk - */ -public interface IErpDataSearchService { - - /** - * 查询烧结配套信息 - * - * @param page - * @param entity - * @return - */ - IPage queryAllocation(IPage page, AllocationDTO entity); - -} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbPkpqryService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbPkpqryService.java new file mode 100644 index 00000000..b55838bf --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpMesRbPkpqryService.java @@ -0,0 +1,25 @@ +package org.springblade.erpdata.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.erpdata.pojo.dto.MesRbPkpqryDTO; + +/** + * ERP数据查询service + * + * @author liuqingkun + */ +public interface IErpMesRbPkpqryService { + + /** + * 查询配置结果 + * + * @param page 分页参数 + * @param pkno 配套单号 + * @param prtmdept 主制部门 + * @param subpkdateStart 配套开始时间 + * @param subpkdateEnd 配套结束时间 + * @return + */ + IPage page(IPage page, String pkno, String prtmdept, String subpkdateStart, String subpkdateEnd); + +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpPartoplinkFirseqService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpPartoplinkFirseqService.java new file mode 100644 index 00000000..980279ea --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpPartoplinkFirseqService.java @@ -0,0 +1,22 @@ +package org.springblade.erpdata.service; + +import org.springblade.erpdata.pojo.dto.PartoplinkFirseqDTO; + +import java.util.List; + +/** + * ERP数据查询service + * + * @author liuqingkun + */ +public interface IErpPartoplinkFirseqService { + + /** + * 根据物料号查询一级工序 + * + * @param partCode + * @return + */ + List listByPartCode(String partCode); + +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataSearchServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataSearchServiceImpl.java deleted file mode 100644 index 195915ad..00000000 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataSearchServiceImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.springblade.erpdata.service.impl; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springblade.erpdata.mapper.ErpDataSearchMapper; -import org.springblade.erpdata.pojo.dto.AllocationDTO; -import org.springblade.erpdata.service.IErpDataSearchService; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @author lqk - * @date 2025-11-26 9:39 - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class ErpDataSearchServiceImpl implements IErpDataSearchService { - - private final ErpDataSearchMapper dataSearchMapper; - - @Override - public IPage queryAllocation(IPage page, AllocationDTO entity) { - List dataList = dataSearchMapper.queryAllocation(page); - return page.setRecords(dataList); - } -} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbPkpqryServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbPkpqryServiceImpl.java new file mode 100644 index 00000000..68941b27 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbPkpqryServiceImpl.java @@ -0,0 +1,29 @@ +package org.springblade.erpdata.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.erpdata.mapper.ErpMesRbPkpqryMapper; +import org.springblade.erpdata.pojo.dto.MesRbPkpqryDTO; +import org.springblade.erpdata.service.IErpMesRbPkpqryService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author liuqingkun + * @date 2026-1-31 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class ErpMesRbPkpqryServiceImpl implements IErpMesRbPkpqryService { + + private final ErpMesRbPkpqryMapper mesRbPkpqryMapper; + + @Override + public IPage page(IPage page, String pkno, String prtmdept, String subpkdateStart, String subpkdateEnd) { + List dataList = mesRbPkpqryMapper.selectPage(page, pkno, prtmdept, subpkdateStart, subpkdateEnd); + return page.setRecords(dataList); + } +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpPartoplinkFirseqServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpPartoplinkFirseqServiceImpl.java new file mode 100644 index 00000000..151d605b --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpPartoplinkFirseqServiceImpl.java @@ -0,0 +1,32 @@ +package org.springblade.erpdata.service.impl; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springblade.erpdata.mapper.ErpPartoplinkFirseqMapper; +import org.springblade.erpdata.pojo.dto.PartoplinkFirseqDTO; +import org.springblade.erpdata.service.IErpPartoplinkFirseqService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author liuqingkun + * @date 2026-1-31 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class ErpPartoplinkFirseqServiceImpl implements IErpPartoplinkFirseqService { + + private final ErpPartoplinkFirseqMapper erpPartoplinkFirseqMapper; + + @Override + public List listByPartCode(String partCode) { + if (StringUtils.isEmpty(partCode)) { + return null; + } + + return erpPartoplinkFirseqMapper.listByPartCode(partCode); + } +} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/CertificateTypeController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/CertificateTypeController.java new file mode 100644 index 00000000..61f50a6d --- /dev/null +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/CertificateTypeController.java @@ -0,0 +1,134 @@ +package org.springblade.scheduling.scheduling.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.BladeUser; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.desk.jobtransfer.pojo.entity.CertificateTypeEntity; +import org.springblade.desk.jobtransfer.pojo.excel.CertificateTypeExcel; +import org.springblade.desk.jobtransfer.pojo.vo.CertificateTypeVO; +import org.springblade.scheduling.scheduling.service.ICertificateTypeService; +import org.springblade.scheduling.scheduling.wrapper.CertificateTypeWrapper; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + * 证书类型 控制器 + * + * @author qyl + * @since 2026-01-08 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/certificateType") +@Tag(name = "证书类型维护", description = "证书类型维护接口") +public class CertificateTypeController extends BladeController { + + private final ICertificateTypeService certificateTypeService; + + /** + * 证书类型 详情 + */ + @GetMapping("/detail") + @ApiOperationSupport(order = 1) + @Operation(summary = "详情", description = "传入certificateType") + public R detail(CertificateTypeEntity certificateType) { + CertificateTypeEntity detail = certificateTypeService.getOne(Condition.getQueryWrapper(certificateType)); + return R.data(CertificateTypeWrapper.build().entityVO(detail)); + } + + /** + * 证书类型 自定义分页 + */ + @GetMapping("/page") + @ApiOperationSupport(order = 3) + @Operation(summary = "分页", description = "传入certificateType") + public R> page(CertificateTypeVO certificateType, Query query) { + IPage pages = certificateTypeService.selectCertificateTypePage(Condition.getPage(query), certificateType); + return R.data(pages); + } + + /** + * 证书类型 新增 + */ + @PostMapping("/save") + @ApiOperationSupport(order = 4) + @Operation(summary = "新增", description = "传入certificateType") + public R save(@Valid @RequestBody CertificateTypeEntity certificateType) { + return R.status(certificateTypeService.save(certificateType)); + } + + /** + * 证书类型 修改 + */ + @PostMapping("/update") + @ApiOperationSupport(order = 5) + @Operation(summary = "修改", description = "传入certificateType") + public R update(@Valid @RequestBody CertificateTypeEntity certificateType) { + return R.status(certificateTypeService.updateById(certificateType)); + } + + /** + * 证书类型 新增或修改 + */ + @PostMapping("/submit") + @ApiOperationSupport(order = 6) + @Operation(summary = "新增或修改", description = "传入certificateType") + public R submit(@Valid @RequestBody CertificateTypeEntity certificateType) { + return R.status(certificateTypeService.saveOrUpdate(certificateType)); + } + + /** + * 证书类型 删除 + */ + @PostMapping("/remove") + @ApiOperationSupport(order = 7) + @Operation(summary = "逻辑删除", description = "传入ids") + public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { + return R.status(certificateTypeService.deleteLogic(Func.toLongList(ids))); + } + + + /** + * 导出数据 + */ + @GetMapping("/export-certificateType") + @ApiOperationSupport(order = 9) + @Operation(summary = "导出数据", description = "传入certificateType") + public void exportCertificateType(@Parameter(hidden = true) @RequestParam Map certificateType, BladeUser bladeUser, HttpServletResponse response) { + QueryWrapper queryWrapper = Condition.getQueryWrapper(certificateType, CertificateTypeEntity.class); + //if (!AuthUtil.isAdministrator()) { + // queryWrapper.lambda().eq(CertificateType::getTenantId, bladeUser.getTenantId()); + //} + //queryWrapper.lambda().eq(CertificateTypeEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); + List list = certificateTypeService.exportCertificateType(queryWrapper); + ExcelUtil.export(response, "证书类型数据" + DateUtil.time(), "证书类型数据表", list, CertificateTypeExcel.class); + } + + /** + * 质量等级表 分页 + */ + @GetMapping("/selectList") + @ApiOperationSupport(order = 2) + @Operation(summary = "分页", description = "传入QualityGrade") + public R> selectGradeList() { + List list = certificateTypeService.list(); + return R.data(list); + } + +} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/QualityGradeController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/QualityGradeController.java index c121b502..310287fc 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/QualityGradeController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/QualityGradeController.java @@ -220,4 +220,15 @@ public class QualityGradeController extends BladeController { ExcelUtil.export(response, "质量等级表数据" + DateUtil.time(), "质量等级表数据表", list, QualityGradeExcel.class); } + /** + * 质量等级表 分页 + */ + @GetMapping("/selectList") + @ApiOperationSupport(order = 2) + @Operation(summary = "分页", description = "传入QualityGrade") + public R> selectGradeList() { + List list = qualityGradeService.list(); + return R.data(list); + } + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java index 5f022d9b..0fb68fcd 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java @@ -287,7 +287,7 @@ public class WorkOrderController extends BladeController { } /** - * 资质执行分析 自定义分页 + * 订单执行分析 自定义分页 */ @GetMapping("/selectOrderExecuteDetailPage") @ApiOperationSupport(order = 3) @@ -297,4 +297,26 @@ public class WorkOrderController extends BladeController { return R.data(pages); } + /** + * 工序执行分析 自定义分页 + */ + @GetMapping("/selectProcessExecutePage") + @ApiOperationSupport(order = 3) + @Operation(summary = "分页", description = "传入WorkOrder") + public R> selectProcessExecutePage(WorkPlanVO workPlan, Query query) { + IPage pages = workOrderService.selectProcessExecutePage(Condition.getPage(query), workPlan); + return R.data(pages); + } + + /** + * 工序执行分析明细 自定义分页 + */ + @GetMapping("/selectProcessExecuteDetailPage") + @ApiOperationSupport(order = 3) + @Operation(summary = "分页", description = "传入WorkOrder") + public R> selectProcessExecuteDetailPage(WorkPlanVO workPlan, Query query) { + IPage pages = workOrderService.selectProcessExecuteDetailPage(Condition.getPage(query), workPlan); + return R.data(pages); + } + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/CertificateTypeMapper.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/CertificateTypeMapper.java new file mode 100644 index 00000000..912c2c1b --- /dev/null +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/CertificateTypeMapper.java @@ -0,0 +1,39 @@ +package org.springblade.scheduling.scheduling.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Param; +import org.springblade.desk.jobtransfer.pojo.entity.CertificateTypeEntity; +import org.springblade.desk.jobtransfer.pojo.excel.CertificateTypeExcel; +import org.springblade.desk.jobtransfer.pojo.vo.CertificateTypeVO; + +import java.util.List; + +/** + * 证书类型 Mapper 接口 + * + * @author qyl + * @since 2026-01-08 + */ +public interface CertificateTypeMapper extends BaseMapper { + + /** + * 自定义分页 + * + * @param page 分页参数 + * @param certificateType 查询参数 + * @return List + */ + List selectCertificateTypePage(IPage page, CertificateTypeVO certificateType); + + + /** + * 获取导出数据 + * + * @param queryWrapper 查询条件 + * @return List + */ + List exportCertificateType(@Param("ew") Wrapper queryWrapper); + +} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/CertificateTypeMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/CertificateTypeMapper.xml new file mode 100644 index 00000000..8432019f --- /dev/null +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/CertificateTypeMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java index 1926cd65..b2dce072 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java @@ -89,4 +89,9 @@ public interface WorkOrderMapper extends BaseMapper { List selectOrderExecuteDetailPage(IPage page, WorkPlanVO workPlan); + List selectProcessExecutePage(IPage page, WorkPlanVO workPlan); + + List selectProcessExecuteDetailPage(IPage page, WorkPlanVO workPlan); + + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml index b5e42fe3..5098abf6 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml @@ -395,7 +395,7 @@ sum( CASE WHEN a.FACT_END_TIME a.PLAN_END_TIME - #{interval} / 1440 THEN 1 ELSE 0 END ) AS earlyFinishCount, sum( CASE WHEN a.FACT_END_TIME BETWEEN a.PLAN_END_TIME - #{interval} / 1440 AND a.PLAN_END_TIME + #{interval} / 1440 THEN 1 ELSE 0 END ) AS onTimeFinishCount, sum( CASE WHEN a.FACT_END_TIME ]]> a.PLAN_END_TIME + #{interval} / 1440 THEN 1 ELSE 0 END ) AS delayFinishCount, - count( 1 ) AS totalOrderCount + count( 1 ) AS totalCount FROM MES_WORK_ORDER a LEFT JOIN MES_YIELD_ORDER b ON a.yo_id = b.id @@ -496,4 +496,149 @@ + + + + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/ICertificateTypeService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/ICertificateTypeService.java new file mode 100644 index 00000000..736de04f --- /dev/null +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/ICertificateTypeService.java @@ -0,0 +1,37 @@ +package org.springblade.scheduling.scheduling.service; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.jobtransfer.pojo.entity.CertificateTypeEntity; +import org.springblade.desk.jobtransfer.pojo.excel.CertificateTypeExcel; +import org.springblade.desk.jobtransfer.pojo.vo.CertificateTypeVO; + +import java.util.List; + +/** + * 证书类型 服务类 + * + * @author qyl + * @since 2026-01-08 + */ +public interface ICertificateTypeService extends BaseService { + /** + * 自定义分页 + * + * @param page 分页参数 + * @param certificateType 查询参数 + * @return IPage + */ + IPage selectCertificateTypePage(IPage page, CertificateTypeVO certificateType); + + + /** + * 导出数据 + * + * @param queryWrapper 查询条件 + * @return List + */ + List exportCertificateType(Wrapper queryWrapper); + +} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java index 4eef3a0d..8a4b6ea4 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java @@ -113,4 +113,9 @@ public interface IWorkOrderService extends BaseService { List selectCenterExecuteList(WorkPlanVO workPlan); IPage selectOrderExecuteDetailPage(IPage page, WorkPlanVO workPlan); + + IPage selectProcessExecutePage(IPage page, WorkPlanVO workPlan); + + IPage selectProcessExecuteDetailPage(IPage page, WorkPlanVO workPlan); + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/CertificateTypeServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/CertificateTypeServiceImpl.java new file mode 100644 index 00000000..4f4a1cbf --- /dev/null +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/CertificateTypeServiceImpl.java @@ -0,0 +1,39 @@ +package org.springblade.scheduling.scheduling.service.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.desk.jobtransfer.pojo.entity.CertificateTypeEntity; +import org.springblade.desk.jobtransfer.pojo.excel.CertificateTypeExcel; +import org.springblade.desk.jobtransfer.pojo.vo.CertificateTypeVO; +import org.springblade.scheduling.scheduling.mapper.CertificateTypeMapper; +import org.springblade.scheduling.scheduling.service.ICertificateTypeService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 证书类型 服务实现类 + * + * @author qyl + * @since 2026-01-08 + */ +@Service +public class CertificateTypeServiceImpl extends BaseServiceImpl implements ICertificateTypeService { + + @Override + public IPage selectCertificateTypePage(IPage page, CertificateTypeVO certificateType) { + return page.setRecords(baseMapper.selectCertificateTypePage(page, certificateType)); + } + + + @Override + public List exportCertificateType(Wrapper queryWrapper) { + List certificateTypeList = baseMapper.exportCertificateType(queryWrapper); + //certificateTypeList.forEach(certificateType -> { + // certificateType.setTypeName(DictCache.getValue(DictEnum.YES_NO, CertificateType.getType())); + //}); + return certificateTypeList; + } + +} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index 50b6f1eb..40792205 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -1472,15 +1472,18 @@ public class WorkOrderServiceImpl extends BaseServiceImpl selectCenterExecuteList(WorkPlanVO workPlan) { + if(workPlan.getInterval() == null){ + workPlan.setInterval(0); + } List list = baseMapper.selectCenterExecuteList(workPlan); if (CollectionUtils.isNotEmpty(list)) { for (WorkPlanVO vo : list) { - vo.setEarlyStartCountRate(vo.getEarlyStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getEarlyStartCount() / vo.getTotalOrderCount())) * 100 + "%"); - vo.setOnTimeStartCountRate(vo.getOnTimeStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getOnTimeStartCount() / vo.getTotalOrderCount())) * 100 + "%"); - vo.setDelayStartCountRate(vo.getDelayStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getDelayStartCount() / vo.getTotalOrderCount())) * 100 + "%"); - vo.setEarlyFinishCountRate(vo.getEarlyFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getEarlyFinishCount() / vo.getTotalOrderCount())) * 100 + "%"); - vo.setOnTimeFinishCountRate(vo.getOnTimeFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getOnTimeFinishCount() / vo.getTotalOrderCount())) * 100 + "%"); - vo.setDelayFinishCountRate(vo.getDelayFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getDelayFinishCount() / vo.getTotalOrderCount())) * 100 + "%"); + vo.setEarlyStartCountRate(vo.getEarlyStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getEarlyStartCount() / vo.getTotalCount())) * 100 + "%"); + vo.setOnTimeStartCountRate(vo.getOnTimeStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getOnTimeStartCount() / vo.getTotalCount())) * 100 + "%"); + vo.setDelayStartCountRate(vo.getDelayStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getDelayStartCount() / vo.getTotalCount())) * 100 + "%"); + vo.setEarlyFinishCountRate(vo.getEarlyFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getEarlyFinishCount() / vo.getTotalCount())) * 100 + "%"); + vo.setOnTimeFinishCountRate(vo.getOnTimeFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getOnTimeFinishCount() / vo.getTotalCount())) * 100 + "%"); + vo.setDelayFinishCountRate(vo.getDelayFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getDelayFinishCount() / vo.getTotalCount())) * 100 + "%"); } } return list; @@ -1488,6 +1491,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl selectOrderExecuteDetailPage(IPage page, WorkPlanVO workPlan) { + if(workPlan.getInterval() == null){ + workPlan.setInterval(0); + } if (StringUtils.isNotEmpty(workPlan.getStartTime())) { workPlan.setStartTime(workPlan.getStartTime() + " 00:00:00"); } @@ -1498,5 +1504,46 @@ public class WorkOrderServiceImpl extends BaseServiceImpl selectProcessExecutePage(IPage page, WorkPlanVO workPlan) { + if(workPlan.getInterval() == null){ + workPlan.setInterval(0); + } + if (StringUtils.isNotEmpty(workPlan.getStartTime())) { + workPlan.setStartTime(workPlan.getStartTime() + " 00:00:00"); + } + if (StringUtils.isNotEmpty(workPlan.getEndTime())) { + workPlan.setEndTime(workPlan.getEndTime() + " 23:59:59"); + } + List list = baseMapper.selectProcessExecutePage(page, workPlan); + if (CollectionUtils.isNotEmpty(list)) { + for (WorkPlanVO vo : list) { + vo.setEarlyStartCountRate(vo.getEarlyStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getEarlyStartCount() / vo.getTotalCount())) * 100 + "%"); + vo.setOnTimeStartCountRate(vo.getOnTimeStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getOnTimeStartCount() / vo.getTotalCount())) * 100 + "%"); + vo.setDelayStartCountRate(vo.getDelayStartCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getDelayStartCount() / vo.getTotalCount())) * 100 + "%"); + vo.setEarlyFinishCountRate(vo.getEarlyFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getEarlyFinishCount() / vo.getTotalCount())) * 100 + "%"); + vo.setOnTimeFinishCountRate(vo.getOnTimeFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getOnTimeFinishCount() / vo.getTotalCount())) * 100 + "%"); + vo.setDelayFinishCountRate(vo.getDelayFinishCount() == 0 ? "0" : Double.parseDouble(String.format("%.2f", (double) vo.getDelayFinishCount() / vo.getTotalCount())) * 100 + "%"); + } + } + return page.setRecords(list); + } + + @Override + public IPage selectProcessExecuteDetailPage(IPage page, WorkPlanVO workPlan) { + if(workPlan.getInterval() == null){ + workPlan.setInterval(0); + } + if (StringUtils.isNotEmpty(workPlan.getStartTime())) { + workPlan.setStartTime(workPlan.getStartTime() + " 00:00:00"); + } + if (StringUtils.isNotEmpty(workPlan.getEndTime())) { + workPlan.setEndTime(workPlan.getEndTime() + " 23:59:59"); + } + List list = baseMapper.selectProcessExecuteDetailPage(page, workPlan); + return page.setRecords(list); + } + + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkPlanServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkPlanServiceImpl.java index 09d0122f..1d42cc5b 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkPlanServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkPlanServiceImpl.java @@ -26,11 +26,15 @@ package org.springblade.scheduling.scheduling.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.ObjectUtils; import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.scheduling.pojo.entity.WorkOrderEntity; import org.springblade.scheduling.pojo.entity.WorkPlanEntity; import org.springblade.scheduling.scheduling.excel.WorkPlanExcel; +import org.springblade.scheduling.scheduling.mapper.WorkOrderMapper; import org.springblade.scheduling.scheduling.mapper.WorkPlanMapper; +import org.springblade.scheduling.scheduling.service.ICraftAbilityService; import org.springblade.scheduling.scheduling.service.IWorkPlanService; import org.springblade.scheduling.scheduling.vo.WorkPlanVO; import org.springframework.stereotype.Service; @@ -51,8 +55,11 @@ import java.util.List; * @since 2025-11-28 */ @Service +@RequiredArgsConstructor public class WorkPlanServiceImpl extends BaseServiceImpl implements IWorkPlanService { + private final WorkOrderMapper workOrderMapper; + @Override public IPage selectWorkPlanPage(IPage page, WorkPlanVO workPlan) { return page.setRecords(baseMapper.selectWorkPlanPage(page, workPlan)); @@ -83,11 +90,24 @@ public class WorkPlanServiceImpl extends BaseServiceImpl allPlanList = baseMapper.selectList(Wrappers.lambdaQuery().eq(WorkPlanEntity::getWoId,workPlan.getWoId()).orderByAsc(WorkPlanEntity::getOrders)); + //获取车间订单 + WorkOrderEntity workOrder = workOrderMapper.selectById(workPlan.getWoId()); + if(workOrder.getFactStartTime() == null && allPlanList.get(0).getFactStartTime() != null){ + workOrder.setFactStartTime(allPlanList.get(0).getFactStartTime()); + } + if(workOrder.getFactEndTime() == null && allPlanList.get(allPlanList.size()-1).getFactEndTime()!=null){ + workOrder.setFactEndTime(allPlanList.get(allPlanList.size()-1).getFactEndTime()); + } + workOrderMapper.updateById(workOrder); } } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/WorkPlanVO.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/WorkPlanVO.java index 79e9bbfb..3caa6c1c 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/WorkPlanVO.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/WorkPlanVO.java @@ -43,6 +43,11 @@ public class WorkPlanVO extends WorkPlanEntity { @Serial private static final long serialVersionUID = 1L; + /** + * 零件号 + */ + private String partCode; + private String partName; private String batchNo; @@ -81,7 +86,7 @@ public class WorkPlanVO extends WorkPlanEntity { private String earlyFinishCountRate; private String onTimeFinishCountRate; private String delayFinishCountRate; - private Integer totalOrderCount; + private Integer totalCount; private Integer interval; private String startType; private String endType; diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/wrapper/CertificateTypeWrapper.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/wrapper/CertificateTypeWrapper.java new file mode 100644 index 00000000..77d985a4 --- /dev/null +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/wrapper/CertificateTypeWrapper.java @@ -0,0 +1,35 @@ +package org.springblade.scheduling.scheduling.wrapper; + +import org.springblade.core.mp.support.BaseEntityWrapper; +import org.springblade.core.tool.utils.BeanUtil; +import org.springblade.desk.jobtransfer.pojo.entity.CertificateTypeEntity; +import org.springblade.desk.jobtransfer.pojo.vo.CertificateTypeVO; + +import java.util.Objects; + +/** + * 证书类型 包装类,返回视图层所需的字段 + * + * @author qyl + * @since 2026-01-08 + */ +public class CertificateTypeWrapper extends BaseEntityWrapper { + + public static CertificateTypeWrapper build() { + return new CertificateTypeWrapper(); + } + + @Override + public CertificateTypeVO entityVO(CertificateTypeEntity certificateType) { + CertificateTypeVO certificateTypeVO = Objects.requireNonNull(BeanUtil.copyProperties(certificateType, CertificateTypeVO.class)); + + //User createUser = UserCache.getUser(certificateType.getCreateUser()); + //User updateUser = UserCache.getUser(certificateType.getUpdateUser()); + //certificateTypeVO.setCreateUserName(createUser.getName()); + //certificateTypeVO.setUpdateUserName(updateUser.getName()); + + return certificateTypeVO; + } + + +}