liweidong
liweidong-hj 4 months ago
parent 8909a27412
commit 84082f576c
  1. 4
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 51
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/feign/IPartClient.java
  3. 16
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java
  4. 8
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProModelEntity.java
  5. 12
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsProcessEntity.java
  6. 7
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskingEntity.java
  7. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java
  8. 69
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsProModelDetailListVO.java
  9. 89
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsReworkTaskVO.java
  10. 7
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java
  11. 8
      blade-service-api/blade-erpdata-api/pom.xml
  12. 54
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataPartClient.java
  13. 21
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataPartClientFallback.java
  14. 56
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataReworkTaskClient.java
  15. 25
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataReworkTaskClientFallback.java
  16. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreservePlanController.java
  17. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsPartController.java
  18. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsProModelController.java
  19. 40
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/feign/PartClient.java
  20. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreservePlanMapper.xml
  21. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsMainSaltAddQuantityMapper.java
  22. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsTaskingMapper.java
  23. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/MainSaltAddQuantityMapper.xml
  24. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProModelMapper.xml
  25. 42
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml
  26. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsMainSaltAddQuantityService.java
  27. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java
  28. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsProModelService.java
  29. 434
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreservePlanServiceImpl.java
  30. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsMainSaltAddQuantityServiceImpl.java
  31. 28
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java
  32. 24
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsProModelServiceImpl.java
  33. 369
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java
  34. 24
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/DateUtils.java
  35. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/iot/mapper/EpLineElectricMapper.java
  36. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/iot/mapper/EpLineElectricMapper.xml
  37. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/iot/setvice/IEpLineElectricService.java
  38. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/iot/setvice/impl/EpLineElectricServiceImpl.java
  39. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java
  40. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  41. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java
  42. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml
  43. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java
  44. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml
  45. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  46. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java
  47. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  48. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java
  49. 36
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataPartClient.java
  50. 34
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataReworkTaskClient.java
  51. 2
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataSearchClient.java
  52. 14
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartMapper.java
  53. 5
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPartMapper.xml
  54. 26
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpReworkTaskMapper.java
  55. 9
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpReworkTaskMapper.xml
  56. 21
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpPartService.java
  57. 22
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpReworkTaskService.java
  58. 62
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpPartServiceImpl.java
  59. 38
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpReworkTaskServiceImpl.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";

@ -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<DsPartRelationEntity> getSubPart(Long partId);
/**
* 批量获取零件信息
* @param ids 零件Ids
* @return 零件集合
*/
@GetMapping(BATCH_PARTS)
public List<DsPartEntity> batchParts(List<Long> ids);
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
/**
* 工序描述
*/

@ -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<DsProDetailEntity> tableData;
}

@ -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;

@ -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;
/**
* 名称
*/

@ -18,6 +18,14 @@
<groupId>org.springblade</groupId>
<artifactId>blade-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-desk-api</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-desk-api</artifactId>
</dependency>
</dependencies>
</project>

@ -0,0 +1,54 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* 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);
}

@ -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过程发送零件信息 失败");
}
}

@ -0,0 +1,56 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* 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<DsReworkTaskVO> fetchUnprocessedReworkTasks();
}

@ -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<DsReworkTaskVO> fetchUnprocessedReworkTasks() {
R.fail("查询ERP返工任务 失败");
return new ArrayList<>();
}
}

@ -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);

@ -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));
}
/**
* 获取零件

@ -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));
}
/**

@ -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<DsPartRelationEntity> getSubPart(Long partId) {
return partRelationService.selectDsPartRelationByPartId(partId);
}
@Override
public List<DsPartEntity> batchParts(List<Long> ids) {
return partService.selectDsPartByIds(ids);
}
}

@ -82,6 +82,7 @@
<foreach collection="bbpTypeList" item="bbpType" open="(" close=")" separator=",">
#{bbpType}
</foreach>
and PRESERVE_PLAN_STATUS != 2
</select>
</mapper>

@ -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<DsMainSaltAddQua
*/
List<DsMainSaltAddQuantityExcel> exportDsMainSaltAddQuantity(@Param("ew") Wrapper<DsMainSaltAddQuantityEntity> queryWrapper);
List<DsMainSaltAddQuantityEntity> getAddQuantity(@Param("startDate")Date startDate,
@Param("endDate") Date endDate,
@Param("wcId") Long wcId,
@Param("batchNo") String batchNo);
}

@ -87,4 +87,22 @@ public interface DsTaskingMapper extends BaseMapper<DsTaskingEntity> {
List<DsTaskingEntity> selectDsTaskingByPartCodeAndVersion(@Param("partCode")String partCode,
@Param("version")String version,
@Param("taskStatusList")List<Integer> taskStatusList);
/**
* 读取老mes返工任务数据
* @return
*/
List<DsTaskingEntity> selectOldMesReworkTasking();
/**
* 根据条件查询 新mes
* @param partCode
* @param reworkOrder
* @param batchNo
* @return
*/
DsTaskingEntity selectReworkTasking(@Param("partCode")String partCode,
@Param("reworkOrder")String reworkOrder,
@Param("batchNo")String batchNo);
}

@ -41,5 +41,11 @@
<select id="exportDsMainSaltAddQuantity" resultType="org.springblade.desk.dashboard.excel.DsMainSaltAddQuantityExcel">
SELECT * FROM DS_MAIN_SALT_ADD_QUANTITY ${ew.customSqlSegment}
</select>
<select id="getAddQuantity"
resultType="org.springblade.desk.dashboard.pojo.entity.DsMainSaltAddQuantityEntity">
select * from DS_MAIN_SALT_ADD_QUANTITY where ADD_TIME between #{startDate} and #{endDate}
and WC_ID = #{wcId}
and BATCH_NO = #{batchNo}
</select>
</mapper>

@ -23,6 +23,7 @@
<result column="PRIORITY" property="priority"/>
<result column="CREATE_TIME" property="createTime"/>
<result column="TEMPLATE_TYPE" property="templateType"/>
<result column="MODEL_NAME_STR" property="modelNameStr"/>
</resultMap>
@ -49,7 +50,8 @@
SELECT * FROM DS_PRO_MODEL ${ew.customSqlSegment}
</select>
<select id="selectDsProModelAll" resultType="org.springblade.desk.dashboard.pojo.vo.DsProModelVO">
select * from DS_PRO_MODEL where is_deleted = 0
select id, code, name, work_center_id, work_center_name, process_num, quality_grade_code, quality_grade_name, plating_type, priority, create_time, create_user, create_dept, update_time, update_user, remarks, status, is_deleted, template_type, model_name_str from DS_PRO_MODEL
where is_deleted = 0
</select>
</mapper>

@ -34,18 +34,28 @@
<result column="TASK_STATUS" property="taskStatus"/>
<result column="RANK" property="rank"/>
<result column="REWORK_ORDER" property="reworkOrder"/>
<result column="RECEPTION_TIME" property="receptionTime"/>
<result column="BATCH_NO" property="batchNo"/>
</resultMap>
<select id="selectDsTaskingPage" resultType="org.springblade.desk.dashboard.pojo.vo.DsTaskingVO">
select * from DS_TASKING where is_deleted = 0 and TASK_STATUS = 0
SELECT t.*
FROM DS_TASKING t
WHERE t.is_deleted = 0
AND NOT EXISTS (
SELECT 1
FROM DS_PART_RELATION r
WHERE r.is_deleted = 0
AND r.CHILD_PART_CODE = t.PART_CODE)
and t.TASK_STATUS = 0
<if test="dsTasking.taskType != null ">
and TASK_TYPE = #{dsTasking.taskType}
and t.TASK_TYPE = #{dsTasking.taskType}
</if>
<if test="dsTasking.partCode != null ">
and PART_CODE = #{dsTasking.partCode}
and t.PART_CODE = #{dsTasking.partCode}
</if>
ORDER BY CREATE_TIME DESC
ORDER BY t.CREATE_TIME DESC
</select>
@ -61,19 +71,17 @@
</select>
<!-- SELECT t.*-->
<!-- FROM DS_TASKING t-->
<!-- WHERE t.is_deleted = 0-->
<!-- AND NOT EXISTS (-->
<!-- SELECT 1-->
<!-- FROM DS_PART_RELATION r-->
<!-- WHERE r.is_deleted = 0-->
<!-- AND r.CHILD_PART_CODE = t.PART_CODE)-->
<select id="selectDisposeList" resultType="org.springblade.desk.dashboard.pojo.vo.DsTaskingVO">
SELECT t.*
FROM DS_TASKING t
WHERE t.is_deleted = 0
AND NOT EXISTS (
SELECT 1
FROM DS_PART_RELATION r
WHERE r.is_deleted = 0
AND r.CHILD_PART_CODE = t.PART_CODE)
<if test="dsTasking.taskStatus != null ">
and TASK_STATUS = #{dsTasking.taskStatus}
</if>
@ -105,5 +113,15 @@
#{taskStatus}
</foreach>
</select>
<select id="selectOldMesReworkTasking"
resultType="org.springblade.desk.dashboard.pojo.entity.DsTaskingEntity">
select * from P_RB_REWORK_ORDER
</select>
<select id="selectReworkTasking" resultType="org.springblade.desk.dashboard.pojo.entity.DsTaskingEntity">
select * from DS_TASKING where is_deleted = 0
and PART_CODE = #{partCode}
and BATCH_NO = #{batchNo}
and REWORK_ORDER = #{reworkOrder}
</select>
</mapper>

@ -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<DsMainSaltAdd
* @return
*/
boolean saveOrUpdateMainSaltAddQuantity(List<DsMainSaltAddQuantityVO> mainSaltAddQuantityList);
/**
* 根据 条件查询
*
* @param startDate 开始时间
* @param addTime 结束时间
* @param wcId 作业中心
* @param batchNo 槽号
* @return
*/
List<DsMainSaltAddQuantityEntity> getAddQuantity(Date startDate, Date addTime, Long wcId, String batchNo);
}

@ -101,6 +101,7 @@ public interface IDsPartService extends BaseService<DsPartEntity> {
/**
* 零件失效预警定时任务
* todo 定时任务
* @return
*/
boolean partLoseEfficacy();
@ -176,12 +177,6 @@ public interface IDsPartService extends BaseService<DsPartEntity> {
*/
boolean updateDsPart(DsPartEntity dsPart, List<DsPartEntity> zPartList);
/**
* 同步零件
* @param partCode
* @return
*/
Object syncPart(String partCode);
/**
* 零件详情

@ -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<DsProModelEntity> {
/**
* 添加模版
* @param data
* @param detailListVO
* @return
*/
boolean saveDsProModel(JSONObject data);
boolean saveDsProModel(DsProModelDetailListVO detailListVO);
/**
* 工艺模版详情

@ -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<DsBatchPreservePlanMapper, DsBatchPreservePlanEntity> implements IDsBatchPreservePlanService {
@ -82,6 +87,9 @@ public class DsBatchPreservePlanServiceImpl extends BaseServiceImpl<DsBatchPrese
@Autowired
IEpLineElectricService epLineElectricService;
@Autowired
IDsMainSaltAddQuantityService mainSaltAddQuantityService;
@Override
public IPage<DsBatchPreservePlanVO> selectDsBatchPreservePlanPage(IPage<DsBatchPreservePlanVO> page, DsBatchPreservePlanVO dsBatchPreservePlan) {
@ -122,6 +130,8 @@ public class DsBatchPreservePlanServiceImpl extends BaseServiceImpl<DsBatchPrese
batchPreservePlan.setApprovalStatus(BatchConstant.STATUS_NEW);
}
batchPreservePlan.setLastTaskTime(new Date());
batchPreservePlan.setAccumulatedStatus("1");
batchPreservePlan.setPreservePlanStatus("1");
save(batchPreservePlan);
}
}
@ -202,6 +212,9 @@ public class DsBatchPreservePlanServiceImpl extends BaseServiceImpl<DsBatchPrese
DsBatchPreserveTaskEntity dsBatchPreserveTask = null;
if(!CollectionUtils.isEmpty(batchPreservePlanList)){
for (DsBatchPreservePlanEntity batchPreservePlan : batchPreservePlanList) {
if("2".equals(batchPreservePlan.getPreservePlanStatus())){
continue;
}
this.createTask(batchPreservePlan, dsBatchPreserveTask);
}
}
@ -234,39 +247,418 @@ public class DsBatchPreservePlanServiceImpl extends BaseServiceImpl<DsBatchPrese
*/
private void createTask(DsBatchPreservePlanEntity batchPreservePlan, DsBatchPreserveTaskEntity dsBatchPreserveTask) {
//电量差 (1)电量差:当前值为1天的电量(自动取数)≥累计触发值,触发任务需添加量
dsBatchPreserveTask = new DsBatchPreserveTaskEntity();
//电量差 (1)电量差: 今天总电量 - 昨天总电量 > 触发值 生成任务
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);
//累计电量类 (2)累计电量:(当前日期的用电量-累计初始日期对应的用电量)≥累计触发值,触发任务需添加量
}
dsBatchPreserveTask.setActualValue(actualValue);
updateById(batchPreservePlan);
}else {
return;
}
}else{
return;
}
//累计电量类 (2)累计电量:如果累计初始日期>当前日期,不计算
//累计初始日期<=当前日期,(当前日期用电总量-累计初始值日期用电总量)>=触发值,触发任务
}else if(BatchConstant.CUMULATIVE_ELECTRICITY.equals(batchPreservePlan.getRuleType())){
//累计生产日期 (3)累计生产日期:当前日期-累计初始日期=累计触发值,触发任务需添加量
String cumulativeInitialValue = batchPreservePlan.getCumulativeInitialValue();
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);
}
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);
Integer cumulativeTriggerValue = batchPreservePlan.getCumulativeTriggerValue();
long daysDiff = calculateDaysDifference(initialDate, yesterday);
boolean isExceedThreshold = daysDiff >= cumulativeTriggerValue;
EpLineElectricEntity yesterdayDsBatchPreservePlanEntity = getPreviousDayMaxElectricData(batchPreservePlan, 1);
double electric = Double.parseDouble(yesterdayDsBatchPreservePlanEntity.getElectric());
//主盐添加量类 (4)累计生产面积:当前值为"累计初始值日期~当前日期"对应作业槽【浸保护剂】工序生产总面积≥累计触发值,触发任务需添加量
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<DsMainSaltAddQuantityEntity> 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<DsMainSaltAddQuantityEntity> 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);
}
}

@ -55,6 +55,9 @@ public class DsMainSaltAddQuantityServiceImpl extends BaseServiceImpl<DsMainSalt
@Autowired
IBsWorkCenterService workCenterService;
@Autowired
DsMainSaltAddQuantityMapper mainSaltAddQuantityMapper;
@Override
public IPage<DsMainSaltAddQuantityVO> selectDsMainSaltAddQuantityPage(IPage<DsMainSaltAddQuantityVO> page, DsMainSaltAddQuantityVO dsMainSaltAddQuantity) {
List<DsMainSaltAddQuantityVO> dsMainSaltAddQuantityVOS = baseMapper.selectDsMainSaltAddQuantityPage(page, dsMainSaltAddQuantity);
@ -89,11 +92,17 @@ public class DsMainSaltAddQuantityServiceImpl extends BaseServiceImpl<DsMainSalt
updateById(dsMainSaltAddQuantityVO);
}else {
dsMainSaltAddQuantityVO.setKeepMan(userId);
dsMainSaltAddQuantityVO.setAddTime(new Date());
save(dsMainSaltAddQuantityVO);
}
}
return true;
}
@Override
public List<DsMainSaltAddQuantityEntity> getAddQuantity(Date startDate, Date endDate, Long wcId, String batchNo) {
return mainSaltAddQuantityMapper.getAddQuantity(startDate,endDate,wcId,batchNo);
}
}

@ -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<DsPartMapper, DsPartEntit
@Autowired
IDsPartVersionService partVersionService;
private static IErpDataPartClient erpDataPartClient;
private static IErpDataPartClient getErpDataPartClient() {
if (erpDataPartClient == null) {
erpDataPartClient = SpringUtil.getBean(IErpDataPartClient.class);
}
return erpDataPartClient;
}
@Override
public IPage<DsPartVO> selectDsPartPage(IPage<DsPartVO> page, DsPartVO dsPart) {
@ -200,7 +214,7 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
//工艺员
technician = collect.get(0).getUserName();
//todo 任务处理 入库
try {
//信息数据匹配
// 工艺员 technician
@ -348,10 +362,9 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
dsPart.setLastUpdateUser(userId);
dsPart.setPfStatus(TaskingConstant.STATUS_NEW);
updateById(dsPart);
//todo 调用erp过程发送零件信息(烧结零件不同步erp)
if (!TaskingConstant.IS_SINTERING.equals(dsPart.getIsSintering())) {
if((org.apache.commons.lang3.StringUtils.isNotBlank(dsPart.getCraftWay()) && dsPart.getCraftWay().contains("4"))) {
//dsPartDao.sendingPartGiveErp(dsPart);
getErpDataPartClient().sendingPartGiveErp(dsPart);
}
}
if(!CollectionUtils.isEmpty(zPartList)){
@ -360,16 +373,7 @@ public class DsPartServiceImpl extends BaseServiceImpl<DsPartMapper, DsPartEntit
return true;
}
@Override
public Object syncPart(String partCode) {
//todo 调用erp接口
// 获取PDM该零件工艺路线
// 判断MES是否有该零件号
// 不存在 提示“零件已同步,新图任务已生成”
// 存在 显示PDM工艺路线,提示“是否新增维护任务?”
return null;
}
@Override
public DsPartSynthesisVO detail(String partCode, String partVersion) {

@ -93,33 +93,33 @@ public class DsProModelServiceImpl extends BaseServiceImpl<DsProModelMapper, DsP
}
@Override
public boolean saveDsProModel(JSONObject data) {
if(null == data){
public boolean saveDsProModel(DsProModelDetailListVO detailListVO) {
if(null == detailListVO){
throw new ServiceException("数据不能为空");
}
DsProModelDetailListVO dsProModelDetailListVO = JSONObject.toJavaObject(data, DsProModelDetailListVO.class);
DsProModelEntity entity = new DsProModelEntity();
// 只复制相同字段名的属性
BeanUtils.copyProperties(dsProModelDetailListVO, entity);
DsProModelEntity promodel = detailListVO.getPromodel();
if(null == promodel){
throw new ServiceException("数据不能为空");
}
entity.setProcessNum((long) dsProModelDetailListVO.getTableData().size());
promodel.setProcessNum((long) detailListVO.getTableData().size());
if(null != entity.getId()){
boolean updateProModel = updateById(entity);
if(null != promodel.getId()){
boolean updateProModel = updateById(promodel);
if(!updateProModel){
throw new ServiceException("工艺模版修改失败");
}
}else {
//新增模版
boolean save = save(entity);
boolean save = save(promodel);
if(!save){
throw new ServiceException("工艺模版新增失败");
}
}
Long modelId = entity.getId();
List<DsProDetailEntity> prodetailList = dsProModelDetailListVO.getTableData();
Long modelId = promodel.getId();
List<DsProDetailEntity> prodetailList = detailListVO.getTableData();
for (DsProDetailEntity tableDatum : prodetailList) {
if(null == tableDatum.getId()){
tableDatum.setModelId(modelId);

@ -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<DsTaskingMapper, DsTas
@Autowired
IDsPartVersionService partVersionService;
private static IErpDataReworkTaskClient erpDataReworkTaskClient;
private static IErpDataReworkTaskClient getErpReworkTaskClient() {
if (erpDataReworkTaskClient == null) {
erpDataReworkTaskClient = SpringUtil.getBean(IErpDataReworkTaskClient.class);
}
return erpDataReworkTaskClient;
}
@Autowired
IYieldOrderService yieldOrderService;
@Autowired
IWorkOrderService workOrderService;
@Autowired
IWorkPlanService workPlanService;
@Override
public IPage<DsTaskingVO> selectAssignList(IPage<DsTaskingVO> page, DsTaskingVO dsTasking) {
List<DsTaskingVO> 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<DsPartRelationEntity> partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId());
//获取所有子件ID
List<Long> idList = partRelationEntityList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList());
if(CollectionUtils.isEmpty(idList)){
continue;
}
//获取版本号 根据子件ID
List<DsPartVersionEntity> partVersionList = partVersionService.selectByPartIds(idList);
List<DsTaskingIsCompletedVO> list = new ArrayList<>();
for (DsPartVersionEntity dsPartVersionEntity : partVersionList) {
//根据零件编码 和 版本号查询数据
List<Integer> taskStatusList = new ArrayList<>(Arrays.asList(
TaskingConstant.TASK_STATUS_WAIT,
TaskingConstant.TASK_STATUS_ALREADY,
TaskingConstant.TASK_STATUS_UNDERWAY
));
List<DsTaskingEntity> dsTaskingEntityList = taskingMapper.selectDsTaskingByPartCodeAndVersion(dsPartVersionEntity.getPartCode(), dsPartVersionEntity.getPartVersion(), taskStatusList);
List<DsTaskingIsCompletedVO> 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<DsTaskingMapper, DsTas
if(null == partEntity){
throw new ServiceException("零件号不存在");
}
//指派零件工艺员
partService.assignTechnician(partEntity.getId(),userName);
}
//任务分派
dsTaskingEntity.setTaskStatus(TaskingConstant.TASK_STATUS_ALREADY);
// dsTaskingEntity.setTaskStatus(TaskingConstant.TASK_STATUS_ALREADY);
// 2026/01/30 修改无需接受 直接进行编制
dsTaskingEntity.setTaskStatus(TaskingConstant.TASK_STATUS_UNDERWAY);
dsTaskingEntity.setCraftMan(userName);
dsTaskingEntity.setAssignMan(AuthUtil.getUser().getUserName());
dsTaskingEntity.setAssignTime(new Date());
@ -638,8 +711,43 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
// 创建工艺节点并设置craftInfo
craftTree.setCraftInfo(JSONObject.from(craft));
craftTree.setProcessList(new ArrayList<>());
result.getCraftList().add(craftTree);
// // 查询零件工艺信息
// List<DsCraftVO> 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<DsProcessEntity> processEntities = processService.selectDsProcessByCraftId(craftVO.getId());
//
// if (!CollectionUtils.isEmpty(processEntities)) {
// List<Long> processIds = processEntities.stream()
// .map(DsProcessEntity::getId)
// .collect(Collectors.toList());
//
// // 批量查询关联数据
// List<DsProcessProjectEntity> processProjectEntityList = processProjectService.selectDsProcessProjectByProcessIds(processIds);
// List<DsProcessMeasuringToolEntity> processMeasuringToolEntityList = processMeasuringToolService.selectDsProcessMeasuringToolByProcessIds(processIds);
// List<DsProcessMoldToolEntity> processMoldToolEntityList = processMoldToolService.selectDsProcessMoldToolByProcessIds(processIds);
//
// // 构建工序树
// List<ProcessTreeVO> processTree = buildProcessTree(processEntities, processProjectEntityList,
// processMeasuringToolEntityList, processMoldToolEntityList);
// craftTree.setProcessList(processTree);
// }
//
// result.getCraftList().add(craftTree);
// }
// }
}
return result;
@ -685,44 +793,240 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
private Connection mesConn;
//存储过程 转 java业务 同步
// List<DsReworkTaskVO> 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<DsReworkTaskVO> reworkTaskVOList = new ArrayList<>();
// if(CollectionUtils.isEmpty(reworkTaskVOList)){
// throw new ServiceException("无返工任务");
// }
@Override
public boolean reworkTask() {
log.info("开始同步返工任务...");
// 存储过程在老mes执行,同步老mes执行完存储过程后的数据
List<DsTaskingEntity> reworkTasks = taskingMapper.selectOldMesReworkTasking();
if (CollectionUtils.isEmpty(reworkTasks)) {
log.info("未读取到返工任务信息");
return true;
}
log.info("共读取到{}条返工任务待处理", reworkTasks.size());
List<DsReworkTaskVO> reworkTasks = null;
int successCount = 0;
int skipCount = 0;
int failCount = 0;
for (DsTaskingEntity dsTasking : reworkTasks) {
try {
// 1. 获取未处理的返工任务
reworkTasks = fetchUnprocessedReworkTasks();
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.setAutoCommit(false);
log.info("返工任务同步完成:成功{}条,跳过{}条,失败{}条", successCount, skipCount, failCount);
// 遍历处理每个返工任务
for (DsReworkTaskVO task : reworkTasks) {
processSingleTask(task);
return failCount == 0;
}
// 提交事务
mesConn.commit();
log.info("返工任务自动分派完成,共处理" + reworkTasks.size() + "个任务");
/**
* 处理单个返工任务
* @return true:处理成功 false:任务已存在跳过处理
*/
private boolean processReworkTask(DsTaskingEntity dsTasking) {
String reworkOrder = dsTasking.getReworkOrder();
String batchNo = dsTasking.getBatchNo();
String partCode = dsTasking.getPartCode();
} 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());
// 检查任务是否已存在
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);
}
List<DsReworkTaskVO> reworkTaskVOList = new ArrayList<>();
if(CollectionUtils.isEmpty(reworkTaskVOList)){
throw new ServiceException("无返工任务");
String partVersion = yieldOrder.getPartVersion();
dsTasking.setVersion(partVersion);
// todo 查审理单 获取返修原因
// 2. 保存任务信息
int taskInsert = taskingMapper.insert(dsTasking);
if (taskInsert <= 0) {
throw new RuntimeException("返工任务插入失败:" + reworkOrder);
}
return false;
// 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<DsCraftVO> craftVOList = craftService.selectDsCraftByPartId(partEntity.getId());
if (CollectionUtils.isEmpty(craftVOList)) {
log.warn("未找到零件工艺,零件ID:{}", partEntity.getId());
return;
}
// 查询车间订单
WorkOrderEntity workOrder = workOrderService.selectByYoId(yieldOrder.getId());
// 提前获取所有workPlan数据
Map<Long, WorkPlanEntity> workPlanMap = prepareWorkPlanMap(workOrder);
// 构建返工工序列表
List<PrReworkProcessEntity> reworkProcessList = buildReworkProcessList(craftVOList, workPlanMap, reworkOrder);
// 批量保存
if (!CollectionUtils.isEmpty(reworkProcessList)) {
boolean saveResult = reworkProcessService.saveBatch(reworkProcessList);
if (!saveResult) {
throw new RuntimeException("返工工序保存失败:" + reworkOrder);
}
log.info("已添加{}条返工工序", reworkProcessList.size());
}
}
/**
* 准备工作计划映射
*/
private Map<Long, WorkPlanEntity> prepareWorkPlanMap(WorkOrderEntity workOrder) {
Map<Long, WorkPlanEntity> workPlanMap = new HashMap<>();
if (workOrder != null) {
List<WorkPlanEntity> workPlanEntityList = workPlanService.selectByWoId(workOrder.getId());
workPlanEntityList.forEach(plan -> workPlanMap.putIfAbsent(plan.getPpsId(), plan));
}
return workPlanMap;
}
/**
* 构建返工工序列表
*/
private List<PrReworkProcessEntity> buildReworkProcessList(List<DsCraftVO> craftVOList,
Map<Long, WorkPlanEntity> workPlanMap,
String reworkOrder) {
List<PrReworkProcessEntity> reworkProcessList = new ArrayList<>();
for (DsCraftVO dsCraftVO : craftVOList) {
List<DsProcessEntity> 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<Long, WorkPlanEntity> 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<DsTaskingMapper, DsTas
}
private void markErpTaskProcessed(String redono) {
//todo 更新erp状态
String sql = "{call pro_rbredoroutstat(?, ?, ?)}";
//todo 更新更新erp状态
// String sql = "{call pro_rbredoroutstat(?, ?, ?)}";
// 标记erp的分配状态
// dba_mgr.pro_rbredoroutstat@erp_mes_link(v_redono,v_excnote, v_excflag);
//更新更新erp状态
}
private void createCraftTask(DsReworkTaskVO task, DsPartEntity partInfo, String craftUserId) {
@ -954,11 +1260,10 @@ public class DsTaskingServiceImpl extends BaseServiceImpl<DsTaskingMapper, DsTas
}
private List<DsReworkTaskVO> 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<DsReworkTaskVO> reworkTaskList = getErpReworkTaskClient().fetchUnprocessedReworkTasks();
return reworkTaskList;
}
/**

@ -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());
}
}

@ -43,7 +43,7 @@ import java.util.List;
public interface EpLineElectricMapper extends BaseMapper<EpLineElectricEntity> {
DsBatchPreservePlanEntity getDataBySlot(@Param("batchNo")String batchNo,
EpLineElectricEntity getDataBySlot(@Param("batchNo")String batchNo,
@Param("deviceCode") String deviceCode,
@Param("startDate")Date startDate,
@Param("endDate") Date endDate);

@ -20,7 +20,7 @@
<result column="IS_DELETED" property="isDeleted"/>
</resultMap>
<select id="getDataBySlot"
resultType="org.springblade.desk.dashboard.pojo.entity.DsBatchPreservePlanEntity">
resultType="org.springblade.desk.dashboard.pojo.entity.EpLineElectricEntity">
SELECT *
FROM (
SELECT
@ -33,8 +33,8 @@
FROM EP_LINE_ELECTRIC
WHERE DEVICE_ID = #{deviceCode}
AND WORK_SLOT = #{batchNo}
AND CREATE_TIME BETWEEN TO_DATE(#{startDate}, 'YYYY-MM-DD')
AND TO_DATE(#{{endDate}}, 'YYYY-MM-DD')
AND CREATE_TIME BETWEEN #{startDate}
AND #{endDate}
AND ELECTRIC IS NOT NULL
ORDER BY TO_NUMBER(ELECTRIC) DESC
)

@ -60,7 +60,7 @@ public interface IEpLineElectricService extends BaseService<EpLineElectricEntity
* @param endDate
* @return
*/
DsBatchPreservePlanEntity getDataBySlot(String batchNo, String deviceCode, Date startdate, Date endDate);
EpLineElectricEntity getDataBySlot(String batchNo, String deviceCode, Date startdate, Date endDate);
}

@ -77,7 +77,7 @@ public class EpLineElectricServiceImpl extends BaseServiceImpl<EpLineElectricMap
}
@Override
public DsBatchPreservePlanEntity getDataBySlot(String batchNo, String deviceCode, Date startDate, Date endDate) {
public EpLineElectricEntity getDataBySlot(String batchNo, String deviceCode, Date startDate, Date endDate) {
return lineElectricMapper.getDataBySlot(batchNo,deviceCode,startDate,endDate);
}

@ -197,4 +197,11 @@ public interface IYieldOrderService extends BaseService<YieldOrder> {
String getMaxCardNo();
/**
* 根据 零件号 批次号查询
* @param partCode
* @param batchNo
* @return
*/
YieldOrder selectByPartCOdeAndBatchNo(String partCode, String batchNo);
}

@ -695,6 +695,11 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return workOrderMapper.getMaxCardNo();
}
@Override
public YieldOrder selectByPartCOdeAndBatchNo(String partCode, String batchNo) {
return workOrderMapper.selectByPartCOdeAndBatchNo(partCode,batchNo);
}
/**
* 验证零件子件信息
*

@ -2,11 +2,14 @@ package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.produce.pojo.dto.QueryByReadStatusDTO;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.vo.QueryByReadStatusVO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.scheduling.pojo.entity.WorkOrderEntity;
import java.util.List;
@ -40,4 +43,8 @@ public interface WorkOrderMapper extends BaseMapper<WorkOrder> {
String getMaxCardNo();
List<QueryByReadStatusVO> queryByReadStatusPage(IPage page, QueryByReadStatusDTO query);
YieldOrder selectByPartCOdeAndBatchNo(@Param("partCode") String partCode,@Param("batchNo") String batchNo);
WorkOrderEntity selectByYoId(@Param("yoId") Long yoId);
}

@ -183,5 +183,12 @@
</where>
ORDER BY a.CREATE_TIME DESC
</select>
<select id="selectByPartCOdeAndBatchNo" resultType="org.springblade.desk.order.pojo.entity.YieldOrder">
select * from MES_YIELD_ORDER where IS_DELETED = 0 and PART_CODE = #{partCode} and BATCH_NO = #{batchNo}
</select>
<select id="selectByYoId" resultType="org.springblade.scheduling.pojo.entity.WorkOrderEntity">
select * from MES_WORK_ORDER where IS_DELETED = 0 and YO_ID = #{yoId}
</select>
</mapper>

@ -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<WorkPlan> {
List<WorkPlanEntity> selectByWoId(@Param("woId") Long woId);
}

@ -45,5 +45,8 @@
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
</resultMap>
<select id="selectByWoId" resultType="org.springblade.scheduling.pojo.entity.WorkPlanEntity">
select * from MES_WORK_PLAN where WO_ID = #{woId}
</select>
</mapper>

@ -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<WorkOrder> {
IPage<QueryByReadStatusVO> queryByReadStatusPage(IPage<QueryByReadStatusVO> page, QueryByReadStatusDTO queryByReadStatusDTO);
boolean setReadStatus(String woIds);
/**
* 根据生产订单 查询车间订单
* @param yoId
* @return
*/
WorkOrderEntity selectByYoId(Long yoId);
}

@ -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<WorkPlan> {
* @param woId 生产车间
*/
void editPreviewNextWorkPlan(Long woId);
/**
* 根据车间订单ID 查询计划
* @param woId
* @return
*/
List<WorkPlanEntity> selectByWoId(Long woId);
}

@ -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<WorkOrderMapper, WorkO
return this.updateBatchById(orders);
}
@Override
public WorkOrderEntity selectByYoId(Long yoId) {
return baseMapper.selectByYoId(yoId);
}
private boolean checkWp(WorkPlan wp, Integer runType) {
//不分派工序不能操作
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());

@ -21,6 +21,7 @@ import org.springblade.desk.quality.pojo.vo.WorkPlanItemVO;
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.WorkPlanEntity;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -213,4 +214,9 @@ public class WorkPlanServiceImpl extends BaseServiceImpl<WorkPlanMapper, WorkPla
this.updateById(wp);
}
}
@Override
public List<WorkPlanEntity> selectByWoId(Long woId) {
return baseMapper.selectByWoId(woId);
}
}

@ -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);
}
}

@ -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<DsReworkTaskVO> fetchUnprocessedReworkTasks() {
return reworkTaskService.fetchUnprocessedReworkTasks();
}
}

@ -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;

@ -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<Wo> {
}

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "org.springblade.erpdata.mapper.ErpPartMapper">
</mapper>

@ -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<Wo> {
/**
* 查询未处理的返工任务
* -- 数据源 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<DsReworkTaskVO> fetchUnprocessedReworkTasks();
}

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "org.springblade.erpdata.mapper.ErpReworkTaskMapper">
<select id="fetchUnprocessedReworkTasks"
resultType="org.springblade.desk.dashboard.pojo.vo.DsReworkTaskVO">
select a.redono,a.prtno,a.splcode,a.deptcode,a.detail from dba_mgr.v_mes_rb_redo a where a.rbmesroutstat is null;
</select>
</mapper>

@ -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<Wo> {
/**
* 同步零件数据至ERP
* @param dsPart
*/
void sendingPartGiveErp(DsPartEntity dsPart) ;
}

@ -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<Wo> {
/**
* 查询ERP 返工任务
* @return
*/
List<DsReworkTaskVO> fetchUnprocessedReworkTasks();
}

@ -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<ErpPartMapper, Wo> 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);
}
}
}

@ -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<ErpReworkTaskMapper, Wo> implements IErpReworkTaskService {
private final ErpReworkTaskMapper reworkTaskMapper;
@Override
public List<DsReworkTaskVO> fetchUnprocessedReworkTasks() {
return reworkTaskMapper.fetchUnprocessedReworkTasks();
}
}
Loading…
Cancel
Save