From 7f0031a58964a80d23163b12d09e6612724bb490 Mon Sep 17 00:00:00 2001 From: 86158 <461356067@qq.com> Date: Thu, 5 Feb 2026 10:27:03 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E6=94=B9=E9=85=8D?= =?UTF-8?q?=E6=96=B9=E7=AE=A1=E7=90=86-=E9=85=8D=E6=96=B9=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=9A=84=E6=96=B0=E5=A2=9E=E5=92=8C=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/recipe/vo/RecipeRespVO.java | 6 ++ .../admin/recipe/vo/RecipeSaveReqVO.java | 6 ++ .../iot/dal/dataobject/recipe/RecipeDO.java | 12 +++- .../iot/service/recipe/RecipeServiceImpl.java | 70 +++++++++++++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java index 6bbee8c9f..d8bc8473a 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java @@ -59,4 +59,10 @@ public class RecipeRespVO { @Schema(description = "设备Id") private Long machineId; + @Schema(description = "配方类型ID", example = "1001") + private Long recipeTypeId; + + @Schema(description = "关联产品ID", example = "1001") + private Long productId; + } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeSaveReqVO.java index 3826accc3..7132459a4 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeSaveReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeSaveReqVO.java @@ -40,4 +40,10 @@ public class RecipeSaveReqVO { @Schema(description = "设备Id") private Long machineId; + @Schema(description = "配方类型ID", example = "1001") + private Long recipeTypeId; + + @Schema(description = "关联产品ID", example = "1001") + private Long productId; + } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipe/RecipeDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipe/RecipeDO.java index 81e54841b..342d8246e 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipe/RecipeDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipe/RecipeDO.java @@ -61,9 +61,19 @@ public class RecipeDO extends BaseDO { private String dataUnit; /** - * 数据单位 + * 关联设备ID */ private Long machineId; + + /** + * 关联产品ID + */ + private Long productId; + + /** + * 关联配方类型ID + */ + private Long recipeTypeId; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java index 3cf175759..e35c54d7f 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java @@ -105,10 +105,14 @@ import cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants; import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipePageReqVO; import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipeRespVO; import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipeSaveReqVO; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; +import cn.iocoder.yudao.module.erp.service.product.ErpProductService; import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; import cn.iocoder.yudao.module.iot.dal.dataobject.recipe.RecipeDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.recipetype.RecipeTypeDO; import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper; import cn.iocoder.yudao.module.iot.dal.mysql.recipe.RecipeMapper; +import cn.iocoder.yudao.module.iot.service.recipetype.RecipeTypeService; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -138,6 +142,10 @@ public class RecipeServiceImpl implements RecipeService { private RecipeMapper recipeMapper; @Resource private DeviceMapper deviceMapper; // 注入现有DeviceMapper + @Resource + private ErpProductService erpProductService; + @Resource + private RecipeTypeService recipeTypeService; // ========== 原有方法保持不变 ========== @Override @@ -152,7 +160,38 @@ public class RecipeServiceImpl implements RecipeService { if (exists) { throw new ServiceException(ErrorCodeConstants.RECIPE_CODE_DUPLICATE); } + + // 根据 ID 获取对应的名称 + String productName = null; + if (createReqVO.getProductId() != null) { + ErpProductDO product = erpProductService.getProduct(createReqVO.getProductId()); + if (product != null) { + productName = product.getName(); + } + } + + String machineName = null; + if (createReqVO.getMachineId() != null) { + DeviceDO device = deviceMapper.selectById(createReqVO.getMachineId()); + if (device != null) { + machineName = device.getDeviceName(); + } + } + + String recipeType = null; + if (createReqVO.getRecipeTypeId() != null) { + RecipeTypeDO recipeTypeDO = recipeTypeService.getRecipeType(createReqVO.getRecipeTypeId()); + if (recipeTypeDO != null) { + recipeType = recipeTypeDO.getName(); + } + } + + // 创建配方对象并设置属性 RecipeDO recipe = BeanUtils.toBean(createReqVO, RecipeDO.class); + recipe.setProductName(productName); + recipe.setMachineName(machineName); + recipe.setRecipeType(recipeType); + recipeMapper.insert(recipe); return recipe.getId(); } @@ -160,7 +199,38 @@ public class RecipeServiceImpl implements RecipeService { @Override public void updateRecipe(RecipeSaveReqVO updateReqVO) { validateRecipeExists(updateReqVO.getId()); + + // 根据 ID 获取对应的名称 + String productName = null; + if (updateReqVO.getProductId() != null) { + ErpProductDO product = erpProductService.getProduct(updateReqVO.getProductId()); + if (product != null) { + productName = product.getName(); + } + } + + String machineName = null; + if (updateReqVO.getMachineId() != null) { + DeviceDO device = deviceMapper.selectById(updateReqVO.getMachineId()); + if (device != null) { + machineName = device.getDeviceName(); + } + } + + String recipeType = null; + if (updateReqVO.getRecipeTypeId() != null) { + RecipeTypeDO recipeTypeDO = recipeTypeService.getRecipeType(updateReqVO.getRecipeTypeId()); + if (recipeTypeDO != null) { + recipeType = recipeTypeDO.getName(); + } + } + + // 创建更新对象并设置属性 RecipeDO updateObj = BeanUtils.toBean(updateReqVO, RecipeDO.class); + updateObj.setProductName(productName); + updateObj.setMachineName(machineName); + updateObj.setRecipeType(recipeType); + recipeMapper.updateById(updateObj); } From ac9c0fdc7a6341d0bff1ae5b649542a6325cfd63 Mon Sep 17 00:00:00 2001 From: 86158 <461356067@qq.com> Date: Thu, 5 Feb 2026 16:18:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix=EF=BC=9A=E8=B4=A8=E9=87=8F=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E6=A3=80=E9=AA=8C=E7=B1=BB=E5=9E=8B=E5=92=8C?= =?UTF-8?q?=E6=A3=80=E9=AA=8C=E4=BB=BB=E5=8A=A1=E7=BC=96=E7=A0=81=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yudao/module/mes/enums/ErrorCodeConstants.java | 2 ++ .../module/mes/service/zjtask/ZjTaskServiceImpl.java | 12 ++++++++++++ .../module/mes/service/zjtype/ZjTypeServiceImpl.java | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index cb6adedc8..fca866259 100644 --- a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -113,11 +113,13 @@ public interface ErrorCodeConstants { ErrorCode ZJ_TYPE_NOT_EXISTS = new ErrorCode(5_0090, "检验类型不存在"); + ErrorCode ZJ_TYPE_CODE_EXISTS = new ErrorCode(5_0090, "检验类型编码已存在"); ErrorCode ZJ_ITEM_NOT_EXISTS = new ErrorCode(5_0091, "检验项目不存在"); ErrorCode ZJ_SCHEMA_NOT_EXISTS = new ErrorCode(5_0092, "检验方案不存在"); ErrorCode ZJ_PRODUCT_NOT_EXISTS = new ErrorCode(5_0093, "检验参数不存在"); ErrorCode ZJ_PRODUCT_RECORD_NOT_EXISTS = new ErrorCode(5_0093, "检验参数不存在"); ErrorCode ZJ_TASK_NOT_EXISTS = new ErrorCode(5_0094, "检验任务不存在"); + ErrorCode ZJ_TASK_CODE_EXISTS = new ErrorCode(5_0094, "检验任务单号已存在"); ErrorCode ZJ_TASK_RESULTS_NOT_EXISTS = new ErrorCode(5_0095, "检验任务-检验结果不存在"); ErrorCode GOVIEW_NOT_EXISTS = new ErrorCode(5_0100, "可视化大屏不存在"); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtask/ZjTaskServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtask/ZjTaskServiceImpl.java index 722588cae..9ad019dbf 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtask/ZjTaskServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtask/ZjTaskServiceImpl.java @@ -12,10 +12,12 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.ticketmanagement.TicketManagem import cn.iocoder.yudao.module.mes.dal.dataobject.zjitem.ZjItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.zjschema.ZjSchemaDO; import cn.iocoder.yudao.module.mes.dal.dataobject.zjtaskresults.ZjTaskResultsDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.zjtype.ZjTypeDO; import cn.iocoder.yudao.module.mes.dal.mysql.zjitem.ZjItemMapper; import cn.iocoder.yudao.module.mes.dal.mysql.zjschema.ZjSchemaMapper; import cn.iocoder.yudao.module.mes.dal.mysql.zjtaskresults.ZjTaskResultsMapper; import cn.iocoder.yudao.module.mes.service.plan.PlanService; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -66,7 +68,10 @@ public class ZjTaskServiceImpl implements ZjTaskService { private PlanService planService; @Override + @Transactional(rollbackFor = Exception.class) public Long createZjTask(ZjTaskSaveReqVO createReqVO) { + // 校验编码是否存在 + validateCodeOnly(createReqVO.getCode()); // 插入 ZjTaskDO zjTask = BeanUtils.toBean(createReqVO, ZjTaskDO.class); zjTaskMapper.insert(zjTask); @@ -111,6 +116,13 @@ public class ZjTaskServiceImpl implements ZjTaskService { return zjTask.getId(); } + private void validateCodeOnly(String code) { + if (zjTaskMapper.exists(Wrappers.lambdaQuery() + .eq(ZjTaskDO::getCode, code))) { + throw exception(ZJ_TASK_CODE_EXISTS); + } + } + @Override public void updateZjTask(ZjTaskSaveReqVO updateReqVO) { // 校验存在 diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtype/ZjTypeServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtype/ZjTypeServiceImpl.java index 6af075f0b..99b0a0eec 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtype/ZjTypeServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/zjtype/ZjTypeServiceImpl.java @@ -2,7 +2,9 @@ package cn.iocoder.yudao.module.mes.service.zjtype; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattributetype.DeviceAttributeTypeDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO; import cn.iocoder.yudao.module.mes.dal.dataobject.zjitem.ZjItemDO; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -34,12 +36,20 @@ public class ZjTypeServiceImpl implements ZjTypeService { @Override public Long createZjType(ZjTypeSaveReqVO createReqVO) { + // 校验编码是否存在 + validateCodeOnly(createReqVO.getCode()); // 插入 ZjTypeDO zjType = BeanUtils.toBean(createReqVO, ZjTypeDO.class); zjTypeMapper.insert(zjType); // 返回 return zjType.getId(); } + private void validateCodeOnly(String code) { + if (zjTypeMapper.exists(Wrappers.lambdaQuery() + .eq(ZjTypeDO::getCode, code))) { + throw exception(ZJ_TYPE_CODE_EXISTS); + } + } @Override public void updateZjType(ZjTypeSaveReqVO updateReqVO) {