diff --git a/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java b/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java index e3dc1cced..7fd0f38de 100644 --- a/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java +++ b/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java @@ -12,9 +12,9 @@ public interface LauncherConstant { /** * nacos 命名空间 */ -// String NACOS_NAMESPACE = "feaf627f-a847-463b-8b73-24a0538f526e"; + String NACOS_NAMESPACE = "feaf627f-a847-463b-8b73-24a0538f526e"; // 生产环境 - String NACOS_NAMESPACE = "db3f4da1-ae19-4104-8c17-6d9b8f069401"; +// String NACOS_NAMESPACE = "db3f4da1-ae19-4104-8c17-6d9b8f069401"; // 测试环境 // String NACOS_NAMESPACE = "6cdd0310-0d61-4f54-891a-7fb06224d9b8"; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/feign/IPartClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/feign/IPartClient.java new file mode 100644 index 000000000..8fddee397 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/feign/IPartClient.java @@ -0,0 +1,51 @@ +package org.springblade.desk.dashboard.feign; + +import org.springblade.core.launch.constant.AppConstant; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.entity.DsPartRelationEntity; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +import java.util.List; + +/** + * @author liweidong + */ +@FeignClient( + value = AppConstant.APPLICATION_DESK_NAME +) +public interface IPartClient { + + String API_PREFIX = "/feign/client/part"; + + String GET_PART = API_PREFIX + "/getPart"; + + String GET_SUB_PART = API_PREFIX + "/getSubPart"; + + String BATCH_PARTS = API_PREFIX + "/batchParts"; + + /** + * 获取零件信息 + * @param partCode 零件号 + * @param version 版本号 + * @return 零件信息 + */ + @GetMapping(GET_PART) + public DsPartEntity getPart(String partCode,String version); + + /** + * 获取子件 + * @param partId 零件ID + * @return 子件集合 + */ + @GetMapping(GET_SUB_PART) + public List getSubPart(Long partId); + + /** + * 批量获取零件信息 + * @param ids 零件Ids + * @return 零件集合 + */ + @GetMapping(BATCH_PARTS) + public List batchParts(List ids); +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java index 00884ec66..6822b9024 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java @@ -134,7 +134,7 @@ public class DsBatchPreservePlanEntity extends BaseEntity { * 添加量 */ @Schema(description = "添加量") - private Integer addQuantity; + private BigDecimal addQuantity; /** * 添加量倍数 @@ -152,7 +152,7 @@ public class DsBatchPreservePlanEntity extends BaseEntity { * 当前值 */ @Schema(description = "当前值") - private Integer currentValue; + private String currentValue; /** * 累计初始值 @@ -190,4 +190,16 @@ public class DsBatchPreservePlanEntity extends BaseEntity { @Schema(description = "设备名称") private String deviceName; + /** + * 添加量类型 + */ + @Schema(description = "添加量类型") + private String addQuantityType; + + /** + * 计划状态 + */ + @Schema(description = "计划状态") + private String preservePlanStatus; + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProModelEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProModelEntity.java index 119bb87aa..7b5352a95 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProModelEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProModelEntity.java @@ -25,6 +25,7 @@ */ package org.springblade.desk.dashboard.pojo.entity; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import io.swagger.v3.oas.annotations.media.Schema; import com.baomidou.mybatisplus.annotation.TableName; @@ -106,4 +107,11 @@ public class DsProModelEntity extends BaseEntity { @Schema(description = "模版类型") private String templateType; + /** + * 模版名称str + */ + @Schema(description = "模版类型") + @JsonProperty("modelNameStr") + private String modelNameStr; + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java index 4f2d6751b..917437bb7 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java @@ -111,4 +111,16 @@ public class DsProcessEntity extends BaseEntity { @Schema(description = "实验编号") private String trialNo; + + /** + * 工序ID + */ + @Schema(description = "工序ID") + private Long ppsId; + + /** + * 工艺能力id + */ + @Schema(description = "工艺能力id") + private Long caId; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.java index 313885b16..a0789fdbc 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.java @@ -25,6 +25,7 @@ */ package org.springblade.desk.dashboard.pojo.entity; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import io.swagger.v3.oas.annotations.media.Schema; import com.baomidou.mybatisplus.annotation.TableName; @@ -178,5 +179,11 @@ public class DsTaskingEntity extends BaseEntity { @Schema(description = "接收时间") private Date receptionTime; + /** + * 批次号 + */ + @TableField(value = "BATCH_NO") + private String batchNo; + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java index 90c2a0ed0..349e41900 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java @@ -80,12 +80,12 @@ public class PrReworkProcessEntity extends BaseEntity { * 工序ID */ @Schema(description = "工序ID") - private BigDecimal ppsId; + private Long ppsId; /** * 工艺能力ID */ @Schema(description = "工艺能力ID") - private BigDecimal caId; + private Long caId; /** * 工序描述 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelDetailListVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelDetailListVO.java index a7a07ba8a..28e9568b4 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelDetailListVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelDetailListVO.java @@ -25,14 +25,10 @@ */ package org.springblade.desk.dashboard.pojo.vo; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import lombok.EqualsAndHashCode; -import org.springblade.core.mp.base.BaseEntity; import org.springblade.desk.dashboard.pojo.entity.DsProDetailEntity; +import org.springblade.desk.dashboard.pojo.entity.DsProModelEntity; -import java.io.Serial; import java.util.List; /** @@ -42,69 +38,10 @@ import java.util.List; * @since 2025-11-12 */ @Data -@EqualsAndHashCode(callSuper = true) -public class DsProModelDetailListVO extends BaseEntity { +public class DsProModelDetailListVO { + private DsProModelEntity promodel; - /** - * 备注 - */ - @Schema(description = "备注") - private String remarks; - /** - * 编码 - */ - @Schema(description = "编码") - private String code; - /** - * 名称 - */ - @Schema(description = "名称") - private String name; - /** - * 作业中心id - */ - @Schema(description = "作业中心id") - private Long workCenterId; - /** - * 作业中心名称 - */ - @Schema(description = "作业中心名称") - private String workCenterName; - /** - * 工序数 - */ - @Schema(description = "工序数") - private Long processNum; - /** - * 生产标识编号 - */ - @Schema(description = "生产标识编号") - private String qualityGradeCode; - /** - * 生产标识名称 - */ - @Schema(description = "生产标识名称") - private String qualityGradeName; - /** - * 镀种分类 - */ - @Schema(description = "镀种分类") - private Integer platingType; - /** - * 优先级 - */ - @Schema(description = "优先级") - private Long priority; - - /** - * 模版类型 - */ - @Schema(description = "模版类型") - private String templateType; - - - @Schema(description = "模版详情") private List tableData; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsReworkTaskVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsReworkTaskVO.java index 163dfcd2b..3f5f5aa8d 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsReworkTaskVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsReworkTaskVO.java @@ -25,13 +25,7 @@ */ package org.springblade.desk.dashboard.pojo.vo; -import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import lombok.EqualsAndHashCode; -import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; - -import java.io.Serial; -import java.util.List; /** * 零件信息表 视图实体类 @@ -54,36 +48,85 @@ public class DsReworkTaskVO { // v_memo - 备注信息 /** - * 返工单号 + * 返修单号 */ - @Schema(description = "返工单号") private String redono; - /** - * 零件号 + * 发生单位 + */ + private String usedept; + /** + * 物料号 */ - @Schema(description = "零件号") private String prtno; - - + /** + * 数量 + */ + private String amount; + /** + * 处理意见 + */ + private String detail; + /** + * 备注 + */ + private String remark; + /** + * 需求日期 + */ + private String reqdate; /** * 批次号 */ - @Schema(description = "批次号") private String splcode; - - /** - * 部门代码 + * 生产标识 */ - @Schema(description = "deptcode") - private String deptcode; - + private String prtlotno; /** - * 描述 + * 审理员 */ - @Schema(description = "detail") - private String detail; + private String cogncer; + /** + * 审理时间 + */ + private String cogncdat; + /** + * 型号 + */ + private String mtltmrk; + /** + * 承修部门 + */ + private String prtmdept; + /** + * 完成时间 + */ + private String udenddat; + /** + * 完成数量 + */ + private String udtotqty; + /** + * 报废数 + */ + private String udwasqty; + /** + * 返工状态 0:等待,1:进行,2:完成 + */ + private Short redostatus; + /** + * 工艺路线生成人 + */ + private String routgenman; + /** + * 工艺路线生成时间 + */ + private String routgendat; + /** + * 工艺路线 + */ + private String deptcode; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java index 13e080cc5..bb79c525c 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java @@ -143,6 +143,13 @@ public class YieldOrder extends BaseEntity { @TableField(value = "PART_CODE") private String partCode; + /** + * todo 只有字段没有动 表 和 mapper + * 零件号版本号 + */ + @TableField(value = "PART_VERSION") + private String partVersion; + /** * 名称 */ diff --git a/blade-service-api/blade-erpdata-api/pom.xml b/blade-service-api/blade-erpdata-api/pom.xml index ccbe8ee0c..e3c498ed1 100644 --- a/blade-service-api/blade-erpdata-api/pom.xml +++ b/blade-service-api/blade-erpdata-api/pom.xml @@ -18,6 +18,14 @@ org.springblade blade-starter-cache + + org.springblade + blade-desk-api + + + org.springblade + blade-desk-api + diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataPartClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataPartClient.java new file mode 100644 index 000000000..7b167d819 --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataPartClient.java @@ -0,0 +1,54 @@ +/** + * 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 org.springblade.common.exception.BusinessException; +import org.springblade.core.launch.constant.AppConstant; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +/** + * Feign接口类 + * + * @author Chill + */ +@FeignClient( + value = AppConstant.APPLICATION_SYSTEM_NAME, + fallback = IErpDataPartClientFallback.class +) +public interface IErpDataPartClient { + + String API_PREFIX = "/feign/erpdata/client"; + String SENDING_PART_GIVE_ERP = API_PREFIX + "/sendingPartGiveErp"; + + /** + * 调用erp过程发送零件信息(烧结零件不同步erp) + * @param dsPart + */ + @PostMapping(SENDING_PART_GIVE_ERP) + void sendingPartGiveErp(org.springblade.desk.dashboard.pojo.entity.DsPartEntity dsPart); +} 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 new file mode 100644 index 000000000..f3465df91 --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataPartClientFallback.java @@ -0,0 +1,21 @@ +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 IErpDataPartClientFallback implements IErpDataPartClient { + + @Override + public void sendingPartGiveErp(org.springblade.desk.dashboard.pojo.entity.DsPartEntity dsPart) { + R.fail("调用erp过程发送零件信息 失败"); + } +} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataReworkTaskClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataReworkTaskClient.java new file mode 100644 index 000000000..e98d10d86 --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataReworkTaskClient.java @@ -0,0 +1,56 @@ +/** + * 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 org.springblade.core.launch.constant.AppConstant; +import org.springblade.desk.dashboard.pojo.vo.DsReworkTaskVO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.List; + +/** + * Feign接口类 + * + * @author Chill + */ +@FeignClient( + value = AppConstant.APPLICATION_SYSTEM_NAME, + fallback = IErpDataReworkTaskClientFallback.class +) +public interface IErpDataReworkTaskClient { + + String API_PREFIX = "/feign/erpdata/client"; + String FETCH_UNPROCESSED_REWORK_TASKS = API_PREFIX + "/fetchUnprocessedReworkTasks"; + + /** + * 查询返工任务 + * @return + */ + @PostMapping(FETCH_UNPROCESSED_REWORK_TASKS) + List fetchUnprocessedReworkTasks(); +} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataReworkTaskClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataReworkTaskClientFallback.java new file mode 100644 index 000000000..096d407c3 --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataReworkTaskClientFallback.java @@ -0,0 +1,25 @@ +package org.springblade.erpdata.feign; + +import org.springblade.core.tool.api.R; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.vo.DsReworkTaskVO; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Feign失败配置 + * + * @author lqk + * @date 2025-12-17 15:13 + */ +@Component +public class IErpDataReworkTaskClientFallback implements IErpDataReworkTaskClient { + + @Override + public List fetchUnprocessedReworkTasks() { + R.fail("查询ERP返工任务 失败"); + return new ArrayList<>(); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreservePlanController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreservePlanController.java index 0b59b12ae..4ecd62a69 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreservePlanController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreservePlanController.java @@ -190,10 +190,10 @@ public class DsBatchPreservePlanController extends BladeController { @Operation(summary = "审批", description = "") public R factoryApproval() { // 创建槽液精细化-计划类-任务发起任务定时器运行... - dsBatchPreservePlanService.createPlanClassTask(); +// dsBatchPreservePlanService.createPlanClassTask(); // 查询3和4 没有时间限制 每天查询 每天新增 //创建槽液精细化-定期类-任务发起任务定时器运行... - dsBatchPreservePlanService.createPeriodicalClassTask(); +// dsBatchPreservePlanService.createPeriodicalClassTask(); // 创建槽液精细化-累计类-任务发起任务定时器运行... dsBatchPreservePlanService.createAccumulateClassTask(); return R.status(true); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartController.java index 17d47ea65..5e25ca36d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartController.java @@ -40,6 +40,9 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.desk.dashboard.pojo.vo.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -55,6 +58,8 @@ import java.util.Map; import java.util.List; import jakarta.servlet.http.HttpServletResponse; +import javax.sql.DataSource; + /** * 零件信息表 控制器 * @@ -242,16 +247,6 @@ public class DsPartController extends BladeController { } - /** - * 同步零件 - */ - @GetMapping("/syncPart") - @ApiOperationSupport(order = 1) - @Operation(summary = "同步零件") - public R syncPart(@RequestParam String partCode) { - - return R.data(dsPartService.syncPart(partCode)); - } /** * 获取零件 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsProModelController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsProModelController.java index a40790699..ed80b2a96 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsProModelController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsProModelController.java @@ -40,6 +40,7 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.desk.dashboard.pojo.vo.DsModelAndDetailVO; +import org.springblade.desk.dashboard.pojo.vo.DsProModelDetailListVO; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -107,8 +108,8 @@ public class DsProModelController extends BladeController { @PostMapping("/save") @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入dsProModel") - public R save(@RequestBody JSONObject data) { - return R.data(dsProModelService.saveDsProModel(data)); + public R save(@RequestBody DsProModelDetailListVO modelDetailListVO) { + return R.data(dsProModelService.saveDsProModel(modelDetailListVO)); } /** diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/feign/PartClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/feign/PartClient.java new file mode 100644 index 000000000..813a6f946 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/feign/PartClient.java @@ -0,0 +1,40 @@ +package org.springblade.desk.dashboard.feign; + +import io.swagger.v3.oas.annotations.Hidden; +import jakarta.annotation.Resource; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.entity.DsPartRelationEntity; +import org.springblade.desk.dashboard.service.IDsPartRelationService; +import org.springblade.desk.dashboard.service.IDsPartService; +import org.springblade.desk.quality.feign.ILquidTankTaskClient; +import org.springblade.desk.quality.service.ILiquidTankTaskService; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@Hidden() +public class PartClient implements IPartClient { + + @Resource + private IDsPartService partService; + + @Resource + private IDsPartRelationService partRelationService; + + @Override + public DsPartEntity getPart(String partCode,String version) { + return partService.selectDsPartByPatCodeAndVersion(partCode,version); + } + + @Override + public List getSubPart(Long partId) { + return partRelationService.selectDsPartRelationByPartId(partId); + } + + @Override + public List batchParts(List ids) { + return partService.selectDsPartByIds(ids); + } +} + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreservePlanMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreservePlanMapper.xml index e33e64960..6f6116322 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreservePlanMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreservePlanMapper.xml @@ -82,6 +82,7 @@ #{bbpType} + and PRESERVE_PLAN_STATUS != 2 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsMainSaltAddQuantityMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsMainSaltAddQuantityMapper.java index 5a334c70e..2aeb3a29f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsMainSaltAddQuantityMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsMainSaltAddQuantityMapper.java @@ -32,6 +32,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; + +import java.util.Date; import java.util.List; /** @@ -61,4 +63,8 @@ public interface DsMainSaltAddQuantityMapper extends BaseMapper exportDsMainSaltAddQuantity(@Param("ew") Wrapper queryWrapper); + List getAddQuantity(@Param("startDate")Date startDate, + @Param("endDate") Date endDate, + @Param("wcId") Long wcId, + @Param("batchNo") String batchNo); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsTaskingMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsTaskingMapper.java index de10b0efb..5744db14e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsTaskingMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsTaskingMapper.java @@ -87,4 +87,22 @@ public interface DsTaskingMapper extends BaseMapper { List selectDsTaskingByPartCodeAndVersion(@Param("partCode")String partCode, @Param("version")String version, @Param("taskStatusList")List taskStatusList); + + /** + * 读取老mes返工任务数据 + * @return + */ + List selectOldMesReworkTasking(); + + /** + * 根据条件查询 新mes + * @param partCode + * @param reworkOrder + * @param batchNo + * @return + */ + DsTaskingEntity selectReworkTasking(@Param("partCode")String partCode, + @Param("reworkOrder")String reworkOrder, + @Param("batchNo")String batchNo); + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/MainSaltAddQuantityMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/MainSaltAddQuantityMapper.xml index db4790ed8..1d1c120f3 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/MainSaltAddQuantityMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/MainSaltAddQuantityMapper.xml @@ -41,5 +41,11 @@ + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProModelMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProModelMapper.xml index 2a994adf3..ff8145571 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProModelMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProModelMapper.xml @@ -23,6 +23,7 @@ + @@ -49,7 +50,8 @@ SELECT * FROM DS_PRO_MODEL ${ew.customSqlSegment} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml index 2a7d064c1..2c70e397e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml @@ -34,18 +34,28 @@ + + @@ -61,19 +71,17 @@ - - - - - - - - + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsMainSaltAddQuantityService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsMainSaltAddQuantityService.java index ab8c8ff70..f37ff2a3a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsMainSaltAddQuantityService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsMainSaltAddQuantityService.java @@ -26,12 +26,13 @@ package org.springblade.desk.dashboard.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; -import org.springblade.desk.dashboard.pojo.dto.DsMainSaltAddQuantityDTO; import org.springblade.desk.dashboard.pojo.entity.DsMainSaltAddQuantityEntity; import org.springblade.desk.dashboard.pojo.vo.DsMainSaltAddQuantityVO; import org.springblade.desk.dashboard.excel.DsMainSaltAddQuantityExcel; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; + +import java.util.Date; import java.util.List; /** @@ -65,4 +66,15 @@ public interface IDsMainSaltAddQuantityService extends BaseService mainSaltAddQuantityList); + + /** + * 根据 条件查询 + * + * @param startDate 开始时间 + * @param addTime 结束时间 + * @param wcId 作业中心 + * @param batchNo 槽号 + * @return + */ + List getAddQuantity(Date startDate, Date addTime, Long wcId, String batchNo); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java index 25e9cdfb3..c56133012 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java @@ -101,6 +101,7 @@ public interface IDsPartService extends BaseService { /** * 零件失效预警定时任务 + * todo 定时任务 * @return */ boolean partLoseEfficacy(); @@ -176,12 +177,6 @@ public interface IDsPartService extends BaseService { */ boolean updateDsPart(DsPartEntity dsPart, List zPartList); - /** - * 同步零件 - * @param partCode - * @return - */ - Object syncPart(String partCode); /** * 零件详情 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsProModelService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsProModelService.java index ddec14cfe..f98198fe3 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsProModelService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsProModelService.java @@ -29,6 +29,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.Wrapper; import org.springblade.desk.dashboard.pojo.entity.DsProModelEntity; import org.springblade.desk.dashboard.pojo.vo.DsModelAndDetailVO; +import org.springblade.desk.dashboard.pojo.vo.DsProModelDetailListVO; import org.springblade.desk.dashboard.pojo.vo.DsProModelVO; import org.springblade.desk.dashboard.excel.DsProModelExcel; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -62,10 +63,10 @@ public interface IDsProModelService extends BaseService { /** * 添加模版 - * @param data + * @param detailListVO * @return */ - boolean saveDsProModel(JSONObject data); + boolean saveDsProModel(DsProModelDetailListVO detailListVO); /** * 工艺模版详情 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreservePlanServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreservePlanServiceImpl.java index c404339a0..fc68da0c5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreservePlanServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreservePlanServiceImpl.java @@ -24,20 +24,20 @@ * Author: Chill Zhuang (bladejava@qq.com) */ package org.springblade.desk.dashboard.service.impl; - +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.desk.dashboard.constant.BatchConstant; import org.springblade.desk.dashboard.pojo.dto.DsBatchPreservePlanDTO; -import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity; -import org.springblade.desk.dashboard.pojo.entity.DsBatchPreservePlanEntity; -import org.springblade.desk.dashboard.pojo.entity.DsBatchPreserveTaskEntity; +import org.springblade.desk.dashboard.pojo.entity.*; import org.springblade.desk.dashboard.pojo.vo.DsBatchPreservePlanVO; import org.springblade.desk.dashboard.excel.DsBatchPreservePlanExcel; import org.springblade.desk.dashboard.mapper.DsBatchPreservePlanMapper; import org.springblade.desk.dashboard.service.IBsWorkCenterService; import org.springblade.desk.dashboard.service.IDsBatchPreservePlanService; import org.springblade.desk.dashboard.service.IDsBatchPreserveTaskService; +import org.springblade.desk.dashboard.service.IDsMainSaltAddQuantityService; import org.springblade.desk.dashboard.utils.DateUtils; import org.springblade.desk.device.pojo.entity.EquipmentEntity; import org.springblade.desk.device.service.IEquipmentService; @@ -50,8 +50,12 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; - +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.*; /** @@ -60,6 +64,7 @@ import java.util.*; * @author BladeX * @since 2025-11-22 */ +@Slf4j @Service public class DsBatchPreservePlanServiceImpl extends BaseServiceImpl implements IDsBatchPreservePlanService { @@ -82,6 +87,9 @@ public class DsBatchPreservePlanServiceImpl extends BaseServiceImpl selectDsBatchPreservePlanPage(IPage page, DsBatchPreservePlanVO dsBatchPreservePlan) { @@ -122,6 +130,8 @@ public class DsBatchPreservePlanServiceImpl extends BaseServiceImpl 触发值 生成任务 if(BatchConstant.ELECTRICITY_DIFFERENCE.equals(batchPreservePlan.getRuleType())){ - Date yesterdayStartDate = DateUtils.getYesterdayStartDate(); - Date yesterdayEndDate = DateUtils.getYesterdayEndDate(); - System.out.println(yesterdayStartDate); - System.out.println(yesterdayEndDate); - //设备编码 - String deviceCode = equipmentService.getById(batchPreservePlan.getDevice()).getDeviceCode(); - //槽号 - String batchNo = batchPreservePlan.getBatchNo(); - //查询 - DsBatchPreservePlanEntity dsBatchPreservePlanEntity = epLineElectricService.getDataBySlot(batchNo,deviceCode,yesterdayStartDate,yesterdayEndDate); + //昨天 + EpLineElectricEntity yesterdayDsBatchPreservePlanEntity = getPreviousDayMaxElectricData(batchPreservePlan, 1); + //前天 + EpLineElectricEntity frontdayDsBatchPreservePlanEntity = getPreviousDayMaxElectricData(batchPreservePlan, 2); + + if(null != yesterdayDsBatchPreservePlanEntity && null != frontdayDsBatchPreservePlanEntity){ + double yesterdayElectric = Double.parseDouble(yesterdayDsBatchPreservePlanEntity.getElectric()); + double frontdayElectric = Double.parseDouble(frontdayDsBatchPreservePlanEntity.getElectric()); + Integer cumulativeTriggerValue = batchPreservePlan.getCumulativeTriggerValue(); + // 计算差值并比较 + boolean isExceedThreshold = yesterdayElectric - frontdayElectric >= cumulativeTriggerValue;; + if(isExceedThreshold){ + //修改计划 + batchPreservePlan.setCumulativeInitialValue(String.valueOf(yesterdayElectric - frontdayElectric)); + batchPreservePlan.setCurrentValue(yesterdayDsBatchPreservePlanEntity.getElectric()); + batchPreservePlan.setPreservePlanStatus("2"); + batchPreservePlan.setAccumulatedStatus("2"); + + + //生成任务 + String addQuantityType = batchPreservePlan.getAddQuantityType(); + BigDecimal actualValue = null; + if("1".equals(addQuantityType)){ + BigDecimal electricBigDecimal = BigDecimal.valueOf(yesterdayElectric); + BigDecimal multipleBigDecimal = BigDecimal.valueOf(batchPreservePlan.getAddQuantityMultiple()); + actualValue = electricBigDecimal.multiply(multipleBigDecimal); + batchPreservePlan.setAddQuantity(electricBigDecimal); + }else { + BigDecimal electricBigDecimal = batchPreservePlan.getAddQuantity(); + BigDecimal multipleBigDecimal = BigDecimal.valueOf(batchPreservePlan.getAddQuantityMultiple()); + actualValue = electricBigDecimal.multiply(multipleBigDecimal); + + } + dsBatchPreserveTask.setActualValue(actualValue); + updateById(batchPreservePlan); + }else { + return; + } + }else{ + return; + } + //累计电量类 (2)累计电量:如果累计初始日期>当前日期,不计算 + //累计初始日期<=当前日期,(当前日期用电总量-累计初始值日期用电总量)>=触发值,触发任务 + }else if(BatchConstant.CUMULATIVE_ELECTRICITY.equals(batchPreservePlan.getRuleType())){ + String cumulativeInitialValue = batchPreservePlan.getCumulativeInitialValue(); - //累计电量类 (2)累计电量:(当前日期的用电量-累计初始日期对应的用电量)≥累计触发值,触发任务需添加量 - }else if(BatchConstant.CUMULATIVE_ELECTRICITY.equals(batchPreservePlan.getRuleType())){ + boolean isDate = false; + + Date targetDateObj = null; + + if (cumulativeInitialValue == null || cumulativeInitialValue.trim().isEmpty()) { + return ; + } + + try { + targetDateObj = isDateAfterOrEqualNow(cumulativeInitialValue); + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_YEAR, -1); + Date now = calendar.getTime(); + isDate = !targetDateObj.before(now); + } catch (Exception e) { + log.error("日期格式无法解析: " + cumulativeInitialValue, e); + } - //累计生产日期 (3)累计生产日期:当前日期-累计初始日期=累计触发值,触发任务需添加量 + if (isDate) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String currentTime = sdf.format(new Date()); + log.info("累计初始日期>当前日期,不计算 当前时间为: {}",currentTime); + return; + } + + EpLineElectricEntity yesterdayDsBatchPreservePlanEntity = getPreviousDayMaxElectricData(batchPreservePlan, 1); + + EpLineElectricEntity electricDataByTargetDate = getElectricDataByTargetDate(targetDateObj, batchPreservePlan); + + //(当前日期用电总量-累计初始值日期用电总量)>=触发值,触发任务 + if(null != yesterdayDsBatchPreservePlanEntity && null != electricDataByTargetDate){ + double electric1 = Double.parseDouble(yesterdayDsBatchPreservePlanEntity.getElectric()); + double electric2 = Double.parseDouble(electricDataByTargetDate.getElectric()); + + Integer cumulativeTriggerValue = batchPreservePlan.getCumulativeTriggerValue(); + + double difference = electric1 - electric2; + log.debug("电量差值计算 - 昨天电量: {}, 初始日期电量: {}, 差值: {}, 触发值: {}", + electric1, electric2, difference, cumulativeTriggerValue); + boolean shouldTrigger = difference >= cumulativeTriggerValue; + + if(shouldTrigger){ + //修改计划 + batchPreservePlan.setCurrentValue(yesterdayDsBatchPreservePlanEntity.getElectric()); + batchPreservePlan.setPreservePlanStatus("2"); + + //生成任务 + String addQuantityType = batchPreservePlan.getAddQuantityType(); + BigDecimal actualValue = null; + if("1".equals(addQuantityType)){ + BigDecimal electricBigDecimal = BigDecimal.valueOf(electric1); + BigDecimal multipleBigDecimal = BigDecimal.valueOf(batchPreservePlan.getAddQuantityMultiple()); + actualValue = electricBigDecimal.multiply(multipleBigDecimal); + + batchPreservePlan.setAddQuantity(electricBigDecimal); + }else { + BigDecimal electricBigDecimal = batchPreservePlan.getAddQuantity(); + BigDecimal multipleBigDecimal = BigDecimal.valueOf(batchPreservePlan.getAddQuantityMultiple()); + actualValue = electricBigDecimal.multiply(multipleBigDecimal); + + } + + dsBatchPreserveTask.setActualValue(actualValue); + updateById(batchPreservePlan); + }else { + return; + } + } + + //(3)累计生产日期:当前日期-累计初始日期=累计触发值,触发任务需添加量 }else if(BatchConstant.CUMULATIVE_PRODUCTION_DAYS.equals(batchPreservePlan.getRuleType())){ + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_YEAR, -1); + Date yesterday = calendar.getTime(); + + String cumulativeInitialValue = batchPreservePlan.getCumulativeInitialValue(); + Date initialDate = isDateAfterOrEqualNow(cumulativeInitialValue); - //主盐添加量类 (4)累计生产面积:当前值为"累计初始值日期~当前日期"对应作业槽【浸保护剂】工序生产总面积≥累计触发值,触发任务需添加量 + Integer cumulativeTriggerValue = batchPreservePlan.getCumulativeTriggerValue(); + + long daysDiff = calculateDaysDifference(initialDate, yesterday); + + boolean isExceedThreshold = daysDiff >= cumulativeTriggerValue; + + EpLineElectricEntity yesterdayDsBatchPreservePlanEntity = getPreviousDayMaxElectricData(batchPreservePlan, 1); + double electric = Double.parseDouble(yesterdayDsBatchPreservePlanEntity.getElectric()); + + if(isExceedThreshold){ + + //修改计划 + batchPreservePlan.setCurrentValue(yesterdayDsBatchPreservePlanEntity.getElectric()); + batchPreservePlan.setPreservePlanStatus("2"); + + //生成任务 + String addQuantityType = batchPreservePlan.getAddQuantityType(); + BigDecimal actualValue = null; + if("1".equals(addQuantityType)){ + BigDecimal electricBigDecimal = BigDecimal.valueOf(electric); + BigDecimal multipleBigDecimal = BigDecimal.valueOf(batchPreservePlan.getAddQuantityMultiple()); + actualValue = electricBigDecimal.multiply(multipleBigDecimal); + + batchPreservePlan.setAddQuantity(electricBigDecimal); + }else { + BigDecimal electricBigDecimal = batchPreservePlan.getAddQuantity(); + BigDecimal multipleBigDecimal = BigDecimal.valueOf(batchPreservePlan.getAddQuantityMultiple()); + actualValue = electricBigDecimal.multiply(multipleBigDecimal); + + } + dsBatchPreserveTask.setActualValue(actualValue); + updateById(batchPreservePlan); + }else { + return; + } + //主盐添加量类 主盐添加量:当前值为1天内【添加量填报】页面填报的作业槽添加量≥累计触发值,触发任务需添加量 }else if(BatchConstant.MAIN_SALT_ADDITION.equals(batchPreservePlan.getRuleType())){ + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_YEAR, -1); + Date yesterday = calendar.getTime(); + Long wcId = batchPreservePlan.getWcId(); + String batchNo = batchPreservePlan.getBatchNo(); + + Date startDate = DateUtils.getStartTime(yesterday); + Date endDate = DateUtils.getEndTime(yesterday); + + List mainSaltAddQuantityList = mainSaltAddQuantityService.getAddQuantity(startDate,endDate,wcId,batchNo); + if(CollectionUtils.isEmpty(mainSaltAddQuantityList)){ + return; + } + BigDecimal total = mainSaltAddQuantityList.stream() + .map(DsMainSaltAddQuantityEntity::getAddValue) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + Integer cumulativeTriggerValue = batchPreservePlan.getCumulativeTriggerValue(); + + BigDecimal triggerValueDecimal = new BigDecimal(cumulativeTriggerValue); + + boolean shouldTrigger = total.compareTo(triggerValueDecimal) >= 0; + + EpLineElectricEntity yesterdayDsBatchPreservePlanEntity = getPreviousDayMaxElectricData(batchPreservePlan, 1); + double electric = Double.parseDouble(yesterdayDsBatchPreservePlanEntity.getElectric()); + + if(shouldTrigger){ + //修改计划 + batchPreservePlan.setCurrentValue(yesterdayDsBatchPreservePlanEntity.getElectric()); + batchPreservePlan.setPreservePlanStatus("2"); + + //生成任务 + String addQuantityType = batchPreservePlan.getAddQuantityType(); + BigDecimal actualValue = null; + if("1".equals(addQuantityType)){ + BigDecimal electricBigDecimal = BigDecimal.valueOf(electric); + BigDecimal multipleBigDecimal = BigDecimal.valueOf(batchPreservePlan.getAddQuantityMultiple()); + actualValue = electricBigDecimal.multiply(multipleBigDecimal); + + batchPreservePlan.setAddQuantity(electricBigDecimal); + }else { + BigDecimal electricBigDecimal = batchPreservePlan.getAddQuantity(); + BigDecimal multipleBigDecimal = BigDecimal.valueOf(batchPreservePlan.getAddQuantityMultiple()); + actualValue = electricBigDecimal.multiply(multipleBigDecimal); + + } + + dsBatchPreserveTask.setActualValue(actualValue); + updateById(batchPreservePlan); + + }else { + return; + } //累计生产面积 (5)主盐添加量:当前值为1天内【添加量填报】页面填报的作业槽添加量≥累计触发值,触发任务需添加量 }else if(BatchConstant.CUMULATIVE_PRODUCTION_AREA.equals(batchPreservePlan.getRuleType())){ + //累计主盐添加量 (6)累计主盐添加量:当前值≥累计触发值(添加量),当前值为累计初始值日期开始在【添加量录入】页面填报的作业槽添加量总和 }else if(BatchConstant.CUMULATIVE_MAIN_SALT_ADDITION.equals(batchPreservePlan.getRuleType())){ + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_YEAR, -1); + Date yesterday = calendar.getTime(); + String cumulativeInitialValue = batchPreservePlan.getCumulativeInitialValue(); + Date dateAfterOrEqualNow = isDateAfterOrEqualNow(cumulativeInitialValue); + + Date startDate = DateUtils.getStartTime(dateAfterOrEqualNow); + Date endDate = DateUtils.getEndTime(yesterday); + Long wcId = batchPreservePlan.getWcId(); + String batchNo = batchPreservePlan.getBatchNo(); + + List mainSaltAddQuantityList = mainSaltAddQuantityService.getAddQuantity(startDate,endDate,wcId,batchNo); + BigDecimal total = mainSaltAddQuantityList.stream() + .map(DsMainSaltAddQuantityEntity::getAddValue) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + Integer cumulativeTriggerValue = batchPreservePlan.getCumulativeTriggerValue(); + + BigDecimal triggerValueDecimal = new BigDecimal(cumulativeTriggerValue); + + boolean shouldTrigger = total.compareTo(triggerValueDecimal) >= 0; + + EpLineElectricEntity yesterdayDsBatchPreservePlanEntity = getPreviousDayMaxElectricData(batchPreservePlan, 1); + double electric = Double.parseDouble(yesterdayDsBatchPreservePlanEntity.getElectric()); + + if(shouldTrigger){ + //修改计划 + batchPreservePlan.setCurrentValue(yesterdayDsBatchPreservePlanEntity.getElectric()); + batchPreservePlan.setPreservePlanStatus("2"); + + //生成任务 + String addQuantityType = batchPreservePlan.getAddQuantityType(); + BigDecimal actualValue = null; + if("1".equals(addQuantityType)){ + BigDecimal electricBigDecimal = BigDecimal.valueOf(electric); + BigDecimal multipleBigDecimal = BigDecimal.valueOf(batchPreservePlan.getAddQuantityMultiple()); + actualValue = electricBigDecimal.multiply(multipleBigDecimal); + + batchPreservePlan.setAddQuantity(electricBigDecimal); + }else { + BigDecimal electricBigDecimal = batchPreservePlan.getAddQuantity(); + BigDecimal multipleBigDecimal = BigDecimal.valueOf(batchPreservePlan.getAddQuantityMultiple()); + actualValue = electricBigDecimal.multiply(multipleBigDecimal); + + } + + dsBatchPreserveTask.setActualValue(actualValue); + updateById(batchPreservePlan); + }else{ + return; + } + } + + dsBatchPreserveTask.setBppId(batchPreservePlan.getId()); + dsBatchPreserveTask.setTaskStatus(BatchConstant.TO_BE_MAINTAINED.longValue()); + batchPreserveTaskService.save(dsBatchPreserveTask); + + } + + + public EpLineElectricEntity getPreviousDayMaxElectricData(DsBatchPreservePlanEntity batchPreservePlan, int daysAgo) { + if (batchPreservePlan == null || daysAgo <= 0) { + log.warn("参数无效,批次计划: {}, daysAgo: {}"+ batchPreservePlan, daysAgo); + return null; + } + + try { + // 获取指定天数的开始和结束时间 + Date targetStartDate = DateUtils.getPreviousDayStartDate(daysAgo); + Date targetEndDate = DateUtils.getPreviousDayEndDate(daysAgo); + + // 获取设备编码 + EquipmentEntity equipment = equipmentService.getById(batchPreservePlan.getDevice()); + if (equipment == null) { + return null; + } + + String deviceCode = equipment.getDeviceCode(); + String batchNo = batchPreservePlan.getBatchNo(); + + // 查询数据 + return epLineElectricService.getDataBySlot(batchNo, deviceCode, targetStartDate, targetEndDate); + + } catch (Exception e) { + log.error("查询{}天前的电量数据异常", daysAgo, e); + return null; + } + } + + + public EpLineElectricEntity getElectricDataByTargetDate(Date targetDate, DsBatchPreservePlanEntity batchPreservePlan) { + // 参数校验 + if (targetDate == null) { + log.warn("目标日期不能为空"); + return null; + } + + if (batchPreservePlan == null) { + log.warn("批次计划不能为空"); + return null; + } + + if (batchPreservePlan.getDevice() == null) { + log.warn("设备ID不能为空"); + return null; + } + + if (StringUtils.isBlank(batchPreservePlan.getBatchNo())) { + log.warn("批次号不能为空"); + return null; } + try { + // 获取目标日期的开始和结束时间 + Date startTime = DateUtils.getStartTime(targetDate); + Date endTime = DateUtils.getEndTime(targetDate); + // 获取设备信息 + EquipmentEntity equipment = equipmentService.getById(batchPreservePlan.getDevice()); + + if (equipment == null) { + log.warn("设备不存在,设备ID: {}", batchPreservePlan.getDevice()); + return null; + } + + String deviceCode = equipment.getDeviceCode(); + if (StringUtils.isBlank(deviceCode)) { + log.warn("设备编码为空,设备ID: {}", batchPreservePlan.getDevice()); + return null; + } + + // 获取批次号 + String batchNo = batchPreservePlan.getBatchNo(); + + // 查询电量数据 + EpLineElectricEntity dataBySlot = epLineElectricService.getDataBySlot( + batchNo, deviceCode, startTime, endTime); + + // 记录查询日志 + if (dataBySlot == null) { + log.debug("未查询到电量数据,目标日期: {}, 批次号: {}, 设备编码: {}", + targetDate, batchNo, deviceCode); + } else { + log.debug("成功查询到电量数据,目标日期: {}, 批次号: {}, 设备编码: {}, 电量: {}", + targetDate, batchNo, deviceCode, dataBySlot.getElectric()); + } + + return dataBySlot; + + } catch (Exception e) { + log.error("根据目标日期查询电量数据异常", e); + return null; + } + } + + + public static Date isDateAfterOrEqualNow(String cumulativeInitialValue) { + try { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate targetDate = LocalDate.parse(cumulativeInitialValue.trim(), formatter); + // 转换为 Date + return Date.from(targetDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + } catch (Exception e) { + log.error("日期格式无法解析: " + cumulativeInitialValue, e); + return null; + } } + /** + * 计算两个日期之间的天数差(忽略时间部分) + */ + private long calculateDaysDifference(Date startDate, Date endDate) { + // 将Date转换为LocalDate(忽略时间部分) + LocalDate start = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate end = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + + // 计算天数差 + return ChronoUnit.DAYS.between(start, end); + } + + + + + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsMainSaltAddQuantityServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsMainSaltAddQuantityServiceImpl.java index 64625c855..1efdc2f8d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsMainSaltAddQuantityServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsMainSaltAddQuantityServiceImpl.java @@ -55,6 +55,9 @@ public class DsMainSaltAddQuantityServiceImpl extends BaseServiceImpl selectDsMainSaltAddQuantityPage(IPage page, DsMainSaltAddQuantityVO dsMainSaltAddQuantity) { List dsMainSaltAddQuantityVOS = baseMapper.selectDsMainSaltAddQuantityPage(page, dsMainSaltAddQuantity); @@ -89,11 +92,17 @@ public class DsMainSaltAddQuantityServiceImpl extends BaseServiceImpl getAddQuantity(Date startDate, Date endDate, Long wcId, String batchNo) { + + + return mainSaltAddQuantityMapper.getAddQuantity(startDate,endDate,wcId,batchNo); + } + } 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 69a232664..be60400b3 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,14 +6,19 @@ 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; import org.springblade.desk.dashboard.constant.TaskingConstant; import org.springblade.desk.dashboard.excel.DsPartExcel; import org.springblade.desk.dashboard.mapper.DsPartMapper; 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.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; @@ -72,6 +77,15 @@ public class DsPartServiceImpl extends BaseServiceImpl selectDsPartPage(IPage page, DsPartVO dsPart) { @@ -200,7 +214,7 @@ public class DsPartServiceImpl extends BaseServiceImpl prodetailList = dsProModelDetailListVO.getTableData(); + Long modelId = promodel.getId(); + List prodetailList = detailListVO.getTableData(); for (DsProDetailEntity tableDatum : prodetailList) { if(null == tableDatum.getId()){ tableDatum.setModelId(modelId); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java index 6d8be04c3..c430f7cd0 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java @@ -31,6 +31,7 @@ import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.utils.AuthUtil; 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.dashboard.constant.*; import org.springblade.desk.dashboard.pojo.dto.DsTaskingDTO; import org.springblade.desk.dashboard.pojo.entity.*; @@ -38,6 +39,14 @@ import org.springblade.desk.dashboard.pojo.vo.*; import org.springblade.desk.dashboard.excel.DsTaskingExcel; import org.springblade.desk.dashboard.mapper.DsTaskingMapper; import org.springblade.desk.dashboard.service.*; +import org.springblade.desk.order.pojo.entity.YieldOrder; +import org.springblade.desk.order.service.IYieldOrderService; +import org.springblade.desk.produce.service.IWorkOrderService; +import org.springblade.desk.produce.service.IWorkPlanService; +import org.springblade.erpdata.feign.IErpDataPartClient; +import org.springblade.erpdata.feign.IErpDataReworkTaskClient; +import org.springblade.scheduling.pojo.entity.WorkOrderEntity; +import org.springblade.scheduling.pojo.entity.WorkPlanEntity; import org.springblade.system.feign.IUserClient; import org.springblade.system.pojo.entity.UserInfo; import org.springframework.beans.BeanUtils; @@ -110,11 +119,72 @@ public class DsTaskingServiceImpl extends BaseServiceImpl selectAssignList(IPage page, DsTaskingVO dsTasking) { List dsTaskingVOS = baseMapper.selectDsTaskingPage(page, dsTasking); + if(!CollectionUtils.isEmpty(dsTaskingVOS)){ + for (DsTaskingVO dsTaskingVO : dsTaskingVOS) { + String partCode = dsTaskingVO.getPartCode(); + String version = dsTaskingVO.getVersion(); + DsPartEntity partEntity = partService.selectDsPartByPatCodeAndVersion(partCode,version); + if(TaskingConstant.IS_SINTERING.equals(partEntity.getIsSintering())){ + //查询子件信息 + List partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId()); + //获取所有子件ID + List idList = partRelationEntityList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(idList)){ + continue; + } + //获取版本号 根据子件ID + List partVersionList = partVersionService.selectByPartIds(idList); + List list = new ArrayList<>(); + for (DsPartVersionEntity dsPartVersionEntity : partVersionList) { + //根据零件编码 和 版本号查询数据 + List taskStatusList = new ArrayList<>(Arrays.asList( + TaskingConstant.TASK_STATUS_WAIT, + TaskingConstant.TASK_STATUS_ALREADY, + TaskingConstant.TASK_STATUS_UNDERWAY + )); + List dsTaskingEntityList = taskingMapper.selectDsTaskingByPartCodeAndVersion(dsPartVersionEntity.getPartCode(), dsPartVersionEntity.getPartVersion(), taskStatusList); + + List collect = dsTaskingEntityList.stream() + .map(entity -> { + DsTaskingIsCompletedVO vo = new DsTaskingIsCompletedVO(); + BeanUtils.copyProperties(entity, vo); + return vo; + }) + .collect(Collectors.toList()); + + list.addAll(collect); + } + + if(!CollectionUtils.isEmpty(list)){ + dsTaskingVO.setChildren(list); + } + } + } + } return page.setRecords(dsTaskingVOS); } @@ -159,12 +229,15 @@ public class DsTaskingServiceImpl extends BaseServiceImpl()); - result.getCraftList().add(craftTree); + +// // 查询零件工艺信息 +// List dsCraftVOList = craftService.selectDsCraftByPartId(partEntity.getId(), "2"); +// if(CollectionUtils.isEmpty(dsCraftVOList)){ +// throw new ServiceException("零件工艺信息有误 请检查该零件是否有工艺信息"); +// } +// +// if (!CollectionUtils.isEmpty(dsCraftVOList)) { +// for (DsCraftVO craftVO : dsCraftVOList) { +// +// craftVO.setReworkOrder(dsTaskingEntity.getReworkOrder()); +// craftVO.setPartId(partEntity.getId()); +// craftVO.setPartVersions(dsTaskingEntity.getVersion()); +// +// // 查询工序信息 +// List processEntities = processService.selectDsProcessByCraftId(craftVO.getId()); +// +// if (!CollectionUtils.isEmpty(processEntities)) { +// List processIds = processEntities.stream() +// .map(DsProcessEntity::getId) +// .collect(Collectors.toList()); +// +// // 批量查询关联数据 +// List processProjectEntityList = processProjectService.selectDsProcessProjectByProcessIds(processIds); +// List processMeasuringToolEntityList = processMeasuringToolService.selectDsProcessMeasuringToolByProcessIds(processIds); +// List processMoldToolEntityList = processMoldToolService.selectDsProcessMoldToolByProcessIds(processIds); +// +// // 构建工序树 +// List processTree = buildProcessTree(processEntities, processProjectEntityList, +// processMeasuringToolEntityList, processMoldToolEntityList); +// craftTree.setProcessList(processTree); +// } +// +// result.getCraftList().add(craftTree); +// } +// } } return result; @@ -685,44 +793,240 @@ public class DsTaskingServiceImpl extends BaseServiceImpl reworkTasks = null; +// +// try { +// // 1. 获取未处理的返工任务 +// reworkTasks = fetchUnprocessedReworkTasks(); +// +// // 开始事务 +// mesConn.setAutoCommit(false); +// +// // 遍历处理每个返工任务 +// for (DsReworkTaskVO task : reworkTasks) { +// processSingleTask(task); +// } +// +// // 提交事务 +// mesConn.commit(); +// log.info("返工任务自动分派完成,共处理" + reworkTasks.size() + "个任务"); +// +// } catch (SQLException e) { +// // 异常处理 - 对应exception when NO_DATA_FOUND +// try { +// mesConn.rollback(); +// log.info("返工任务分派失败,事务已回滚: " + e.getMessage()); +// System.out.println("找不到数据,执行失败!"); // 对应dbms_output.put_line +// } catch (SQLException ex) { +// log.info("回滚失败: " + ex.getMessage()); +// } +// } +// +// List reworkTaskVOList = new ArrayList<>(); +// if(CollectionUtils.isEmpty(reworkTaskVOList)){ +// throw new ServiceException("无返工任务"); +// } + + @Override public boolean reworkTask() { + log.info("开始同步返工任务..."); - List reworkTasks = null; + // 存储过程在老mes执行,同步老mes执行完存储过程后的数据 + List reworkTasks = taskingMapper.selectOldMesReworkTasking(); - try { - // 1. 获取未处理的返工任务 - reworkTasks = fetchUnprocessedReworkTasks(); + if (CollectionUtils.isEmpty(reworkTasks)) { + log.info("未读取到返工任务信息"); + return true; + } + + log.info("共读取到{}条返工任务待处理", reworkTasks.size()); - // 开始事务 - mesConn.setAutoCommit(false); + int successCount = 0; + int skipCount = 0; + int failCount = 0; - // 遍历处理每个返工任务 - for (DsReworkTaskVO task : reworkTasks) { - processSingleTask(task); + for (DsTaskingEntity dsTasking : reworkTasks) { + try { + boolean result = processReworkTask(dsTasking); + if (result) { + successCount++; + } else { + skipCount++; + } + } catch (Exception e) { + failCount++; + log.error("处理返工任务失败,返工单号:{},零件号:{},批次号:{},错误信息:{}", + dsTasking.getReworkOrder(), + dsTasking.getPartCode(), + dsTasking.getBatchNo(), + e.getMessage(), e); + //继续处理下一条任务 + continue; } + } - // 提交事务 - mesConn.commit(); - log.info("返工任务自动分派完成,共处理" + reworkTasks.size() + "个任务"); + log.info("返工任务同步完成:成功{}条,跳过{}条,失败{}条", successCount, skipCount, failCount); - } catch (SQLException e) { - // 异常处理 - 对应exception when NO_DATA_FOUND - try { - mesConn.rollback(); - log.info("返工任务分派失败,事务已回滚: " + e.getMessage()); - System.out.println("找不到数据,执行失败!"); // 对应dbms_output.put_line - } catch (SQLException ex) { - log.info("回滚失败: " + ex.getMessage()); + return failCount == 0; + } + + /** + * 处理单个返工任务 + * @return true:处理成功 false:任务已存在,跳过处理 + */ + private boolean processReworkTask(DsTaskingEntity dsTasking) { + String reworkOrder = dsTasking.getReworkOrder(); + String batchNo = dsTasking.getBatchNo(); + String partCode = dsTasking.getPartCode(); + + // 检查任务是否已存在 + DsTaskingEntity existingTask = taskingMapper.selectReworkTasking(partCode, reworkOrder, batchNo); + if (existingTask != null) { + log.info("返工任务已存在,跳过:{}", reworkOrder); + return false; + } + + // 1. 获取生产订单信息 + YieldOrder yieldOrder = yieldOrderService.selectByPartCOdeAndBatchNo(partCode, batchNo); + if (yieldOrder == null) { + throw new RuntimeException("无法在生产订单中获取零件版本号,零件号:" + partCode + ",批次号:" + batchNo); + } + + String partVersion = yieldOrder.getPartVersion(); + dsTasking.setVersion(partVersion); + // todo 查审理单 获取返修原因 + + // 2. 保存任务信息 + int taskInsert = taskingMapper.insert(dsTasking); + if (taskInsert <= 0) { + throw new RuntimeException("返工任务插入失败:" + reworkOrder); + } + + // 3. 获取零件信息 + DsPartEntity partEntity = partService.selectDsPartByPatCodeAndVersion(partCode, partVersion); + if (partEntity == null) { + throw new RuntimeException("零件查询为空:" + partCode + " : " + partVersion); + } + + // 4. 创建返工工艺 + DsCraftEntity craftEntity = createReworkCraft(partEntity, partVersion, reworkOrder); + boolean saveCraft = craftService.save(craftEntity); + if (!saveCraft) { + throw new RuntimeException("返工工艺添加失败:" + reworkOrder); + } + + // 5. 查询并添加工序、加工班组、外协厂商 + addReworkProcesses(partEntity, yieldOrder, reworkOrder); + + log.info("返工任务同步成功:{}", reworkOrder); + return true; + } + + /** + * 创建返工工艺实体 + */ + private DsCraftEntity createReworkCraft(DsPartEntity partEntity, String partVersion, String reworkOrder) { + DsCraftEntity craftEntity = new DsCraftEntity(); + craftEntity.setPartId(partEntity.getId()); + craftEntity.setPrority(3); + craftEntity.setRank("2"); + craftEntity.setPartVersions(partVersion); + craftEntity.setReworkOrder(reworkOrder); + craftEntity.setCraftStatus("3"); + return craftEntity; + } + + /** + * 添加工序、加工班组、外协厂商 + */ + private void addReworkProcesses(DsPartEntity partEntity, YieldOrder yieldOrder, String reworkOrder) { + // 查询工艺 + List craftVOList = craftService.selectDsCraftByPartId(partEntity.getId()); + if (CollectionUtils.isEmpty(craftVOList)) { + log.warn("未找到零件工艺,零件ID:{}", partEntity.getId()); + return; + } + + // 查询车间订单 + WorkOrderEntity workOrder = workOrderService.selectByYoId(yieldOrder.getId()); + + // 提前获取所有workPlan数据 + Map workPlanMap = prepareWorkPlanMap(workOrder); + + // 构建返工工序列表 + List reworkProcessList = buildReworkProcessList(craftVOList, workPlanMap, reworkOrder); + + // 批量保存 + if (!CollectionUtils.isEmpty(reworkProcessList)) { + boolean saveResult = reworkProcessService.saveBatch(reworkProcessList); + if (!saveResult) { + throw new RuntimeException("返工工序保存失败:" + reworkOrder); } + log.info("已添加{}条返工工序", reworkProcessList.size()); } + } - List reworkTaskVOList = new ArrayList<>(); - if(CollectionUtils.isEmpty(reworkTaskVOList)){ - throw new ServiceException("无返工任务"); + /** + * 准备工作计划映射 + */ + private Map prepareWorkPlanMap(WorkOrderEntity workOrder) { + Map workPlanMap = new HashMap<>(); + if (workOrder != null) { + List workPlanEntityList = workPlanService.selectByWoId(workOrder.getId()); + workPlanEntityList.forEach(plan -> workPlanMap.putIfAbsent(plan.getPpsId(), plan)); } + return workPlanMap; + } - return false; + /** + * 构建返工工序列表 + */ + private List buildReworkProcessList(List craftVOList, + Map workPlanMap, + String reworkOrder) { + List reworkProcessList = new ArrayList<>(); + + for (DsCraftVO dsCraftVO : craftVOList) { + List processEntities = processService.selectDsProcessByCraftId(dsCraftVO.getId()); + + for (DsProcessEntity processEntity : processEntities) { + PrReworkProcessEntity prReworkProcessEntity = createReworkProcess(processEntity, workPlanMap, reworkOrder); + reworkProcessList.add(prReworkProcessEntity); + } + } + + return reworkProcessList; + } + + /** + * 创建返工工序实体 + */ + private PrReworkProcessEntity createReworkProcess(DsProcessEntity processEntity, + Map workPlanMap, + String reworkOrder) { + PrReworkProcessEntity prReworkProcessEntity = new PrReworkProcessEntity(); + prReworkProcessEntity.setReworkCode(reworkOrder); + prReworkProcessEntity.setPpsId(processEntity.getPpsId()); + prReworkProcessEntity.setPpsName(processEntity.getProcessName()); + prReworkProcessEntity.setCaId(processEntity.getCaId()); + prReworkProcessEntity.setCraftName(processEntity.getCraftName()); + prReworkProcessEntity.setCruxProcess(processEntity.getIsMain()); + prReworkProcessEntity.setMakeMemo(processEntity.getProDes()); + + // 从map中获取对应的workPlan + WorkPlanEntity workPlan = workPlanMap.get(processEntity.getPpsId()); + if (workPlan != null) { + prReworkProcessEntity.setProcessNo(workPlan.getOrders()); + prReworkProcessEntity.setMakeTeam(workPlan.getMakeTeam()); + prReworkProcessEntity.setOcId(workPlan.getOcId()); + } else { + log.warn("未找到对应工序的工作计划: ppsId={}", processEntity.getPpsId()); + } + + return prReworkProcessEntity; } @Override @@ -837,10 +1141,12 @@ public class DsTaskingServiceImpl extends BaseServiceImpl fetchUnprocessedReworkTasks() { - // -- 数据源 erp -// -- select a.redono, a.prtno, a.splcode, a.deptcode, a.detail -// -- from dba_mgr.v_mes_rb_redo@erp_mes_link a -// -- where a.rbmesroutstat is null; - return new ArrayList<>(); + + List reworkTaskList = getErpReworkTaskClient().fetchUnprocessedReworkTasks(); + + return reworkTaskList; } /** diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/DateUtils.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/DateUtils.java index 79f3f9575..3437693e2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/DateUtils.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/DateUtils.java @@ -265,31 +265,31 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils /** - * 获取昨天的开始时间(00:00:00) + * 获取指定天数前的开始时间(00:00:00) */ - public static LocalDateTime getYesterdayStart() { - return LocalDate.now().minusDays(1).atStartOfDay(); + public static LocalDateTime getPreviousDayStart(int daysAgo) { + return LocalDate.now().minusDays(daysAgo).atStartOfDay(); } /** - * 获取昨天的结束时间(23:59:59.999999999) + * 获取指定天数前的结束时间(23:59:59.999999999) */ - public static LocalDateTime getYesterdayEnd() { - return LocalDate.now().minusDays(1).atTime(LocalTime.MAX); + public static LocalDateTime getPreviousDayEnd(int daysAgo) { + return LocalDate.now().minusDays(daysAgo).atTime(LocalTime.MAX); } /** - * 获取昨天的开始时间(Date格式) + * 获取指定天数前的开始时间(Date格式) */ - public static Date getYesterdayStartDate() { - return Date.from(getYesterdayStart().atZone(ZoneId.systemDefault()).toInstant()); + public static Date getPreviousDayStartDate(int daysAgo) { + return Date.from(getPreviousDayStart(daysAgo).atZone(ZoneId.systemDefault()).toInstant()); } /** - * 获取昨天的结束时间(Date格式) + * 获取指定天数前的结束时间(Date格式) */ - public static Date getYesterdayEndDate() { - return Date.from(getYesterdayEnd().atZone(ZoneId.systemDefault()).toInstant()); + public static Date getPreviousDayEndDate(int daysAgo) { + return Date.from(getPreviousDayEnd(daysAgo).atZone(ZoneId.systemDefault()).toInstant()); } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/mapper/EpLineElectricMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/mapper/EpLineElectricMapper.java index 148aee980..98c7da2c8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/mapper/EpLineElectricMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/mapper/EpLineElectricMapper.java @@ -43,7 +43,7 @@ import java.util.List; public interface EpLineElectricMapper extends BaseMapper { - DsBatchPreservePlanEntity getDataBySlot(@Param("batchNo")String batchNo, + EpLineElectricEntity getDataBySlot(@Param("batchNo")String batchNo, @Param("deviceCode") String deviceCode, @Param("startDate")Date startDate, @Param("endDate") Date endDate); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/mapper/EpLineElectricMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/mapper/EpLineElectricMapper.xml index c98e837fb..e19103c69 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/mapper/EpLineElectricMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/iot/mapper/EpLineElectricMapper.xml @@ -20,7 +20,7 @@ + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java index 06382a344..af14469ed 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java @@ -1,7 +1,11 @@ package org.springblade.desk.produce.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.springblade.desk.produce.pojo.entity.WorkPlan; +import org.springblade.scheduling.pojo.entity.WorkPlanEntity; + +import java.util.List; /** * 车间作业计划 Mapper 接口 @@ -11,4 +15,5 @@ import org.springblade.desk.produce.pojo.entity.WorkPlan; */ public interface WorkPlanMapper extends BaseMapper { + List selectByWoId(@Param("woId") Long woId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml index 042f0f18a..8f1a5f552 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml @@ -45,5 +45,8 @@ + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java index f27a60981..cc3eff7bb 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java @@ -13,6 +13,7 @@ import org.springblade.desk.produce.pojo.vo.BatchPrepareVO; import org.springblade.desk.produce.pojo.vo.QueryByReadStatusVO; import org.springblade.desk.produce.pojo.vo.WorkOrderVO; import org.springblade.desk.produce.pojo.vo.WorkPlanRunVO; +import org.springblade.scheduling.pojo.entity.WorkOrderEntity; import java.util.List; @@ -53,4 +54,11 @@ public interface IWorkOrderService extends BaseService { IPage queryByReadStatusPage(IPage page, QueryByReadStatusDTO queryByReadStatusDTO); boolean setReadStatus(String woIds); + + /** + * 根据生产订单 查询车间订单 + * @param yoId + * @return + */ + WorkOrderEntity selectByYoId(Long yoId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java index 1eda4dfbe..ed5b22e63 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java @@ -3,6 +3,7 @@ package org.springblade.desk.produce.service; import org.springblade.core.mp.base.BaseService; import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.desk.produce.pojo.entity.WorkPlan; +import org.springblade.scheduling.pojo.entity.WorkPlanEntity; import java.util.List; @@ -23,4 +24,11 @@ public interface IWorkPlanService extends BaseService { * @param woId 生产车间 */ void editPreviewNextWorkPlan(Long woId); + + /** + * 根据车间订单ID 查询计划 + * @param woId + * @return + */ + List selectByWoId(Long woId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java index a488c39b3..8bac6ed4d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java @@ -29,6 +29,7 @@ import org.springblade.desk.quality.pojo.entity.PlanTest; import org.springblade.desk.quality.service.IInspectionTaskService; import org.springblade.desk.quality.service.IPlanTestService; import org.springblade.desk.quality.service.IWorkPlanItemService; +import org.springblade.scheduling.pojo.entity.WorkOrderEntity; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -412,6 +413,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl selectByWoId(Long woId) { + return baseMapper.selectByWoId(woId); + } } 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 new file mode 100644 index 000000000..389c24550 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataPartClient.java @@ -0,0 +1,36 @@ +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; + + +/** + * 字典服务Feign实现类 + * + * @author Chill + */ +@NonDS +@Hidden +@RestController +@AllArgsConstructor +public class ErpDataPartClient implements IErpDataPartClient{ + + private final IErpPartService partService; + + @Override + @GetMapping(SENDING_PART_GIVE_ERP) + public void sendingPartGiveErp(DsPartEntity dsPart) { + partService.sendingPartGiveErp(dsPart); + } +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataReworkTaskClient.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataReworkTaskClient.java new file mode 100644 index 000000000..8dbebea64 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataReworkTaskClient.java @@ -0,0 +1,34 @@ +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.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.vo.DsReworkTaskVO; +import org.springblade.erpdata.service.IErpPartService; +import org.springblade.erpdata.service.IErpReworkTaskService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + + +/** + * 字典服务Feign实现类 + * + * @author Chill + */ +@NonDS +@Hidden +@RestController +@AllArgsConstructor +public class ErpDataReworkTaskClient implements IErpDataReworkTaskClient{ + + private final IErpReworkTaskService reworkTaskService; + + @Override + public List fetchUnprocessedReworkTasks() { + return reworkTaskService.fetchUnprocessedReworkTasks(); + } +} 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 index 4c7d5cd18..10298ec4f 100644 --- 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 @@ -6,8 +6,10 @@ 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; @@ -21,7 +23,7 @@ import org.springframework.web.bind.annotation.RestController; @Hidden @RestController @AllArgsConstructor -public class ErpDataSearchClient implements IErpDataSearchClient { +public class ErpDataSearchClient implements IErpDataSearchClient{ private final IErpDataSearchService dataSearchService; diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartMapper.java new file mode 100644 index 000000000..db27836a4 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartMapper.java @@ -0,0 +1,14 @@ +package org.springblade.erpdata.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.erpdata.pojo.dto.table.Wo; + +/** + * Mapper 接口 + * + * @author lqk + */ +public interface ErpPartMapper extends BaseMapper { + + +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartMapper.xml new file mode 100644 index 000000000..2111a3410 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpReworkTaskMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpReworkTaskMapper.java new file mode 100644 index 000000000..e066908f1 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpReworkTaskMapper.java @@ -0,0 +1,26 @@ +package org.springblade.erpdata.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.desk.dashboard.pojo.vo.DsReworkTaskVO; +import org.springblade.erpdata.pojo.dto.table.Wo; + +import java.util.List; + +/** + * Mapper 接口 + * + * @author lqk + */ +public interface ErpReworkTaskMapper extends BaseMapper { + + /** + * 查询未处理的返工任务 + * -- 数据源 erp + * -- select a.redono, a.prtno, a.splcode, a.deptcode, a.detail + * -- from dba_mgr.v_mes_rb_redo@erp_mes_link a + * -- where a.rbmesroutstat is null; + * + * @return + */ + List fetchUnprocessedReworkTasks(); +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpReworkTaskMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpReworkTaskMapper.xml new file mode 100644 index 000000000..d6a199866 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpReworkTaskMapper.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpPartService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpPartService.java new file mode 100644 index 000000000..70c6e0388 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpPartService.java @@ -0,0 +1,21 @@ +package org.springblade.erpdata.service; + +import com.google.protobuf.ServiceException; +import org.springblade.common.exception.BusinessException; +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.erpdata.pojo.dto.table.Wo; + +/** + * ERP数据查询service + * + * @author lqk + */ +public interface IErpPartService extends BaseService { + + /** + * 同步零件数据至ERP + * @param dsPart + */ + void sendingPartGiveErp(DsPartEntity dsPart) ; +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpReworkTaskService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpReworkTaskService.java new file mode 100644 index 000000000..468cfac30 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpReworkTaskService.java @@ -0,0 +1,22 @@ +package org.springblade.erpdata.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.vo.DsReworkTaskVO; +import org.springblade.erpdata.pojo.dto.table.Wo; + +import java.util.List; + +/** + * ERP数据查询service + * + * @author lqk + */ +public interface IErpReworkTaskService extends BaseService { + + /** + * 查询ERP 返工任务 + * @return + */ + List fetchUnprocessedReworkTasks(); +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpPartServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpPartServiceImpl.java new file mode 100644 index 000000000..891dc05d6 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpPartServiceImpl.java @@ -0,0 +1,62 @@ +package org.springblade.erpdata.service.impl; + +import com.google.protobuf.ServiceException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.common.exception.BusinessException; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.utils.Func; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.erpdata.mapper.ErpPartMapper; +import org.springblade.erpdata.mapper.ErpWoMapper; +import org.springblade.erpdata.pojo.dto.table.Wo; +import org.springblade.erpdata.service.IErpPartService; +import org.springblade.erpdata.service.IErpWoService; +import org.springframework.stereotype.Service; + +import javax.sql.DataSource; +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.Timestamp; + +/** + * @author lqk + * @date 2025-11-26 9:39 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class ErpPartServiceImpl extends BaseServiceImpl implements IErpPartService { + + private final DataSource dataSource; + + @Override + public void sendingPartGiveErp(DsPartEntity dsPart) { + log.info("JDBC调用ERP存储过程:{}", dsPart.getPartCode()); + + String sql = "{call dba_mgr.pro_rbprtmsgupdate@erp_mes_link(" + + ":v_prtno, :v_rigidity, :v_prtmeterial, :v_prtarea, " + + ":v_kdofplat, :v_sbsd, :v_gjxx, :v_chgname, :v_chgdate)}"; + + try (Connection conn = dataSource.getConnection(); + CallableStatement cs = conn.prepareCall(sql)) { + + cs.setString("v_prtno", dsPart.getPartCode()); + cs.setString("v_rigidity", Func.toStr(dsPart.getHardness(), "")); + cs.setString("v_prtmeterial", Func.toStr(dsPart.getMaterial(), "")); + cs.setDouble("v_prtarea", Func.toDouble(dsPart.getArea(), 0.0)); + cs.setString("v_kdofplat", Func.toStr(dsPart.getPlate(), "")); + cs.setString("v_sbsd", Func.toStr(dsPart.getRemarks(), "")); + cs.setString("v_gjxx", Func.toStr(dsPart.getKeyInfo(), "")); + cs.setString("v_chgname", ""); + cs.setTimestamp("v_chgdate", new Timestamp(dsPart.getUpdateTime().getTime())); + // 执行 + cs.execute(); + + log.info("JDBC调用ERP成功:{}", dsPart.getPartCode()); + + } catch (Exception e) { + log.error("JDBC调用ERP失败:{}", dsPart.getPartCode(), e); + } + } +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpReworkTaskServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpReworkTaskServiceImpl.java new file mode 100644 index 000000000..af35def6d --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpReworkTaskServiceImpl.java @@ -0,0 +1,38 @@ +package org.springblade.erpdata.service.impl; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.utils.Func; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.vo.DsReworkTaskVO; +import org.springblade.erpdata.mapper.ErpMesRbWxpromotionMapper; +import org.springblade.erpdata.mapper.ErpPartMapper; +import org.springblade.erpdata.mapper.ErpReworkTaskMapper; +import org.springblade.erpdata.pojo.dto.table.Wo; +import org.springblade.erpdata.service.IErpPartService; +import org.springblade.erpdata.service.IErpReworkTaskService; +import org.springframework.stereotype.Service; + +import javax.sql.DataSource; +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.Timestamp; +import java.util.List; + +/** + * @author lqk + * @date 2025-11-26 9:39 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class ErpReworkTaskServiceImpl extends BaseServiceImpl implements IErpReworkTaskService { + + private final ErpReworkTaskMapper reworkTaskMapper; + + @Override + public List fetchUnprocessedReworkTasks() { + return reworkTaskMapper.fetchUnprocessedReworkTasks(); + } +}