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