diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/ErpProductController.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/ErpProductController.java index aa132e962..8d7ef6c4e 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/ErpProductController.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/ErpProductController.java @@ -53,7 +53,8 @@ public class ErpProductController { public CommonResult createProduct(@Valid @RequestBody ProductSaveReqVO createReqVO) { ErpProductPageReqVO productPageReqVO = new ErpProductPageReqVO(); productPageReqVO.setName(createReqVO.getName()); - if (!productMapper.selectProductExist(productPageReqVO).getList().isEmpty()) { + productPageReqVO.setStandard(createReqVO.getStandard()); + if (productMapper.selectProductExist(productPageReqVO)) { return error(400,"名称+规格不能重复"); } productPageReqVO = new ErpProductPageReqVO(); @@ -68,6 +69,17 @@ public class ErpProductController { @Operation(summary = "更新产品") //@PreAuthorize("@ss.hasPermission('erp:product:update')") public CommonResult updateProduct(@Valid @RequestBody ProductSaveReqVO updateReqVO) { + ErpProductPageReqVO productPageReqVO = new ErpProductPageReqVO(); + productPageReqVO.setName(updateReqVO.getName()); + productPageReqVO.setStandard(updateReqVO.getStandard()); + if (productMapper.selectProductExist(productPageReqVO)) { + return error(400,"名称+规格不能重复"); + } + productPageReqVO = new ErpProductPageReqVO(); + productPageReqVO.setCode(updateReqVO.getBarCode()); + if (!productMapper.selectProductCodeExist(productPageReqVO).getList().isEmpty()) { + return error(400,"编码不能重复"); + } productService.updateProduct(updateReqVO); return success(true); } diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/product/ErpProductMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/product/ErpProductMapper.java index 05aaf08bc..b3f319246 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/product/ErpProductMapper.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/product/ErpProductMapper.java @@ -6,8 +6,10 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductPageReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; +import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.Collection; @@ -36,11 +38,16 @@ public interface ErpProductMapper extends BaseMapperX { .orderByAsc(ErpProductDO::getId)); } - default PageResult selectProductExist(ErpProductPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(ErpProductDO::getName, reqVO.getName()) - .eqIfPresent(ErpProductDO::getStandard, reqVO.getStandard()) - .orderByAsc(ErpProductDO::getId)); + default Boolean selectProductExist(ErpProductPageReqVO reqVO) { + LambdaQueryWrapperX queryWrapper = (LambdaQueryWrapperX) new LambdaQueryWrapperX() + .orderByAsc(ErpProductDO::getId); + if (StringUtils.hasText(reqVO.getName()) && StringUtils.hasText(reqVO.getStandard())) { + // 组合查询:name 和 standard 必须同时匹配 + queryWrapper.eq(ErpProductDO::getName, reqVO.getName()) + .eq(ErpProductDO::getStandard, reqVO.getStandard()); + return !selectPage(reqVO, queryWrapper).getList().isEmpty(); + } + return false; } default Long selectCountByCategoryId(Long categoryId) { diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/DeviceRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/DeviceRespVO.java index f4a4a39de..8c81d0139 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/DeviceRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/DeviceRespVO.java @@ -120,4 +120,6 @@ public class DeviceRespVO { @JsonDeserialize(using = LocalDateTimeDeserializer.class) private LocalDateTime collectionTime; + @Schema(description = "关联组织", example = "1") + private Long org; } \ 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/recipedeviceattribute/RecipeDeviceAttributeController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/RecipeDeviceAttributeController.java index 4bc2b0b37..951364ead 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/RecipeDeviceAttributeController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/RecipeDeviceAttributeController.java @@ -95,6 +95,14 @@ public class RecipeDeviceAttributeController { return success(pageResult); } + @GetMapping("/list") + @Operation(summary = "查询配方配置列表") + public CommonResult> list(RecipeDeviceAttributePageReqVO reqVO) { + // 替换为关联查询方法 + PageResult pageResult = recipeDeviceAttributeService.selectPageWithAttribute(reqVO); + return success(pageResult); + } + @GetMapping("/export-excel") @Operation(summary = "导出配方配置(关联采集设备模型-点位管理) Excel") @PreAuthorize("@ss.hasPermission('iot:recipe-device-attribute:export')") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipeplandetail/vo/RecipePlanDetailSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipeplandetail/vo/RecipePlanDetailSaveReqVO.java index 4bfda9daf..5c40be984 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipeplandetail/vo/RecipePlanDetailSaveReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipeplandetail/vo/RecipePlanDetailSaveReqVO.java @@ -24,7 +24,7 @@ public class RecipePlanDetailSaveReqVO { @NotNull(message = "关联配方(关联iot_recipe表的id)不能为空") private Long recipeId; - @Schema(description = "关联计划(关联mes_plan表的id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "28398") + @Schema(description = "关联计划(关联mes_plan表的id)", example = "28398") // @NotNull(message = "关联计划(关联mes_plan表的id)不能为空") private Long planId; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/device/DeviceDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/device/DeviceDO.java index 0cbc6233b..bdf6786ff 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/device/DeviceDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/device/DeviceDO.java @@ -111,4 +111,5 @@ public class DeviceDO extends BaseDO { */ private String tenantId; + } \ 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/mysql/device/DeviceMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/DeviceMapper.java index 380ba1f8d..c1474ac7c 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/DeviceMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/DeviceMapper.java @@ -97,6 +97,8 @@ public interface DeviceMapper extends BaseMapperX { IPage lineDevicePage(Page page, @Param("pageReqVO") LineDeviceRequestVO pageReqVO); + String lineDeviceLedgerPage(@Param("id") Long id); + List lineDeviceList(@Param("pageReqVO") LineDeviceRequestVO pageReqVO); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java index f881fc7d6..9498f5b1e 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java @@ -110,6 +110,7 @@ public class DeviceServiceImpl implements DeviceService { + @Override @Transactional(rollbackFor = Exception.class) public DeviceDO createDevice(DeviceSaveReqVO createReqVO) { @@ -303,10 +304,7 @@ public class DeviceServiceImpl implements DeviceService { deviceRespVO.setOperatingStatus(DeviceStatusEnum.OFFLINE.getName()); } - - } - return deviceRespVOPageResult; } @@ -611,21 +609,30 @@ public class DeviceServiceImpl implements DeviceService { @Override public PageResult lineDevicePage(LineDeviceRequestVO pageReqVO) { - Page page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); +// Page page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - IPage lineDeviceRespVO = deviceMapper.lineDevicePage(page,pageReqVO); - List records = lineDeviceRespVO.getRecords(); - for (LineDeviceRespVO record : records) { - Map latestDeviceData = tdengineService.getLatestDeviceData(record.getDeviceId()); +// IPage lineDeviceRespVO = deviceMapper.lineDevicePage(page,pageReqVO); + PageResult pageResult = getDevicePage(BeanUtils.toBean(pageReqVO, DevicePageReqVO.class)); + + List list = new ArrayList<>(); + for (DeviceRespVO record : pageResult.getList()) { + LineDeviceRespVO lineDeviceRespVO = new LineDeviceRespVO(); + lineDeviceRespVO.setDeviceCode(record.getDeviceCode()); + lineDeviceRespVO.setDeviceName(record.getDeviceName()); + lineDeviceRespVO.setStatus(record.getStatus()); + lineDeviceRespVO.setCollectionTime(String.valueOf(record.getCollectionTime())); + lineDeviceRespVO.setId(record.getId()); + Map latestDeviceData = tdengineService.getLatestDeviceData(record.getId()); if(latestDeviceData != null) { - record.setCollectionTime((String) latestDeviceData.get("timestamp")); + lineDeviceRespVO.setCollectionTime((String) latestDeviceData.get("timestamp")); } + lineDeviceRespVO.setLineName(deviceMapper.lineDeviceLedgerPage(record.getId())); + list.add(lineDeviceRespVO); } - - PageResult lineDeviceRespVOPageResult = new PageResult<>(lineDeviceRespVO.getRecords(), lineDeviceRespVO.getTotal()); - - - return lineDeviceRespVOPageResult; + if (list.isEmpty()) { + return PageResult.empty(); // 返回空Page + } + return new PageResult<>(list, pageResult.getTotal()); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java index 359844871..b0250e667 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java @@ -15,18 +15,18 @@ import com.fasterxml.jackson.core.JsonProcessingException; */ public interface RecipeDeviceAttributeService { - /** - * 创建配方配置(关联采集设备模型-点位管理) - * - * @param createReqVO 创建信息 + /* + 创建配方配置(关联采集设备模型-点位管理) + + @param createReqVO 创建信息 * @return 编号 */ // Long createRecipeDeviceAttribute(@Valid RecipeDeviceAttributeSaveReqVO createReqVO); - /** - * 更新配方配置(关联采集设备模型-点位管理) - * - * @param updateReqVO 更新信息 + /* + 更新配方配置(关联采集设备模型-点位管理) + + @param updateReqVO 更新信息 */ // void updateRecipeDeviceAttribute(@Valid RecipeDeviceAttributeSaveReqVO updateReqVO); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/DeviceMapper.xml b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/DeviceMapper.xml index bdc808aae..4a85fab05 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/DeviceMapper.xml +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/DeviceMapper.xml @@ -58,6 +58,14 @@ order by mo.id desc + +