diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java index 84c9b12188..93d01f123e 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java @@ -90,8 +90,9 @@ public class MoldBrandController { HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = moldBrandService.getMoldBrandPage(pageReqVO).getList(); + List moldBrandRespVOS = BeanUtils.toBean(list, MoldBrandRespVO.class); // 导出 Excel - ExcelUtils.write(response, "模具型号.xls", "数据", MoldBrandRespVO.class, list); + ExcelUtils.write(response, "模具型号.xls", "数据", MoldBrandRespVO.class, moldBrandRespVOS); } // ==================== 子表(模具) ==================== @@ -101,6 +102,14 @@ public class MoldBrandController { List doList = moldBrandService.selectBy(moldDO); return success(doList); } + + @GetMapping("/getMoldAllList") + @Operation(summary = "获得模具型号") + public CommonResult> getMoldAllList() { + List doList = moldBrandService.getAllList(); + return success(doList); + } + @GetMapping("/mold/page") @Operation(summary = "获得模具分页") @Parameter(name = "brandId", description = "型号id") diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/enums/OrgTypeStatusEnum.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/enums/OrgTypeStatusEnum.java new file mode 100644 index 0000000000..507ca7188c --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/enums/OrgTypeStatusEnum.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.erp.controller.admin.mold.enums; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum OrgTypeStatusEnum { + zhijiang("zhijiang", "制浆"), + duidie("duidie", "堆叠"), + chengxing("chengxing", "成型"), + honggan("honggan", "烘干"), + zhuanyi("zhuanyi", "转移"), + jiashi("jiashi", "加湿"), + reya("reya", "热压"), + qiebian("qiebian", "切边"), + pinjian("pinjian", "品检"), + dabao("dabao", "打包"), + tiebiao("tiebiao", "贴标"), + sufeng("sufeng", "塑封"), + pinyin("pinyin", "品印"); + + private final String orgtype; + private final String description; + + public static OrgTypeStatusEnum getByCode(String code) { + for (OrgTypeStatusEnum status : values()) { + if (status.getOrgtype().equals(code)) { + return status; + } + } + return null; + } +} diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandPageReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandPageReqVO.java index bed87c23da..64ba6bf31a 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandPageReqVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandPageReqVO.java @@ -53,4 +53,7 @@ public class MoldBrandPageReqVO extends PageParam { @Schema(description = "工序", example = "你说的对") private String orgType; + + @Schema(description = "id集合导出用") + private String ids; } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandRespVO.java index 00e5024566..d5125adff9 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandRespVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandRespVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.erp.controller.admin.mold.vo; +import com.alibaba.excel.annotation.write.style.ColumnWidth; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -11,6 +12,7 @@ import com.alibaba.excel.annotation.*; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + @Schema(description = "管理后台 - 模具型号 Response VO") @Data @ExcelIgnoreUnannotated @@ -35,24 +37,24 @@ public class MoldBrandRespVO { @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2336") private Long productId; @Schema(description = "产品", requiredMode = Schema.RequiredMode.REQUIRED, example = "2336") - @ExcelProperty("产品") +// @ExcelProperty("产品") private String productName; - @Schema(description = "预期寿命(小时)") - @ExcelProperty("预期寿命(小时)") + @Schema(description = "预期寿命/次") + @ExcelProperty("预期寿命/次") private BigDecimal useTime; @Schema(description = "维保模式", example = "2") - @ExcelProperty(value = "维保模式", converter = DictConvert.class) +// @ExcelProperty(value = "维保模式", converter = DictConvert.class) @DictFormat("maintain_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 private Integer maintainType; @Schema(description = "维保周期") - @ExcelProperty("维保周期") +// @ExcelProperty("维保周期") private BigDecimal maintainTime; - @Schema(description = "模具系数", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("模具系数") + @Schema(description = "模穴数", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("模穴数") private Long moldSize; @Schema(description = "备注", example = "你说的对") @@ -60,14 +62,17 @@ public class MoldBrandRespVO { private String remark; @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("是否启用") +// @ExcelProperty("是否启用") private Boolean isEnable; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") + @ColumnWidth(20) private LocalDateTime createTime; @Schema(description = "工序", example = "你说的对") @DictFormat("mes_org_type") + @ExcelProperty(value = "工序") private String orgType; +// , converter = OrgTypeConverter.class } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPageReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPageReqVO.java index 15ca17d84f..fbeaffc7a8 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPageReqVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldPageReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.erp.controller.admin.mold.vo; +import com.alibaba.excel.annotation.ExcelProperty; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -54,4 +55,10 @@ public class MoldPageReqVO extends PageParam { @Schema(description = "型号id", example = "15258") private Long brandId; + @Schema(description = "id集合导出用") + private String ids; + +// @Schema(description = "机台名字") +// private String machineName; + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldRespVO.java index eb5f28a566..041e4bc5f9 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldRespVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldRespVO.java @@ -34,15 +34,15 @@ public class MoldRespVO { @Schema(description = "单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19527") private Long unitId; @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED, example = "个") - @ExcelProperty("单位") +// @ExcelProperty("单位") private String unitName; - @Schema(description = "机台ID", example = "24428") - @ExcelProperty("机台ID") + @Schema(description = "设备ID", example = "24428") + @ExcelProperty("使用设备") private Long machineId; - @Schema(description = "使用时间(小时)") - @ExcelProperty("使用时间(小时)") + @Schema(description = "使用次数/次") + @ExcelProperty("使用次数/次") private BigDecimal useTime; @Schema(description = "入库时间", requiredMode = Schema.RequiredMode.REQUIRED) @@ -56,7 +56,7 @@ public class MoldRespVO { private Integer status; @Schema(description = "模具图片") - @ExcelProperty("模具图片") +// @ExcelProperty("模具图片") private String images; @Schema(description = "备注", example = "你猜") @@ -64,15 +64,19 @@ public class MoldRespVO { private String remark; @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("是否启用") +// @ExcelProperty("是否启用") private Boolean isEnable; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("创建时间") +// @ExcelProperty("创建时间") private LocalDateTime createTime; @Schema(description = "型号id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15258") @ExcelProperty("型号id") private Long brandId; + @Schema(description = "附件地址") + @ExcelProperty("附件地址") + private String fileUrl; + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/OrgTypeConverter.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/OrgTypeConverter.java new file mode 100644 index 0000000000..30a941430e --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/OrgTypeConverter.java @@ -0,0 +1,86 @@ +package cn.iocoder.yudao.module.erp.controller.admin.mold.vo; + +import cn.iocoder.yudao.module.erp.controller.admin.mold.enums.OrgTypeStatusEnum; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import org.springframework.stereotype.Component; + +/** + * 模具类型状态转换器(英文字符串 ↔ 中文) + */ +@Component +public class OrgTypeConverter implements Converter { // 泛型改为 String,对应英文字符串 + + /** + * 读取Excel时调用(Excel中的英文/中文 → Java对象的英文字符串) + */ + @Override + public String convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + String cellValue = cellData.getStringValue(); + if (cellValue == null || cellValue.trim().isEmpty()) { + return null; + } + + // 优先匹配中文 → 转换为对应的英文常量名 + for (OrgTypeStatusEnum status : OrgTypeStatusEnum.values()) { + if (status.getDescription().equals(cellValue)) { // 注意枚举的描述方法是 getDesc + return status.name(); // 返回枚举的英文常量名(如 IN_USE) + } + } + + // 匹配英文 → 直接返回(兼容Excel中填英文的场景) + for (OrgTypeStatusEnum status : OrgTypeStatusEnum.values()) { + if (status.name().equals(cellValue)) { + return cellValue; + } + } + + // 无匹配则抛出异常 + throw new IllegalArgumentException("设备状态格式错误: " + cellValue + ",仅支持中文(在机/在库/维修中/保养中/报废)或英文(IN_USE/IN_STOCK/UNDER_REPAIR/UNDER_MAINTENANCE/SCRAPPED)"); + } + + /** + * 写入Excel时调用(Java对象的英文字符串 → Excel中的中文) + */ + @Override + public WriteCellData convertToExcelData(String value, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + if (value == null || value.trim().isEmpty()) { + return new WriteCellData<>(""); + } + + // 根据英文常量名匹配枚举,转换为中文 + OrgTypeStatusEnum status = null; + try { + status = OrgTypeStatusEnum.valueOf(value); // 通过英文名称获取枚举 + } catch (IllegalArgumentException e) { + // 若英文匹配失败,尝试兜底匹配中文(兼容异常场景) + for (OrgTypeStatusEnum s : OrgTypeStatusEnum.values()) { + if (s.getDescription().equals(value)) { + status = s; + break; + } + } + } + + String text = status != null ? status.getDescription() : "未知"; + return new WriteCellData<>(text); + } + + // 必须实现的接口方法:指定转换的Java类型 + @Override + public Class supportJavaTypeKey() { + return String.class; + } + + // 必须实现的接口方法:指定Excel单元格类型 + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldBrandMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldBrandMapper.java index b0ef596e5e..600066aafe 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldBrandMapper.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldBrandMapper.java @@ -5,9 +5,13 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldBrandPageReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldBrandDO; +import com.alibaba.excel.util.StringUtils; import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.*; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; /** * 模具型号 Mapper @@ -18,7 +22,23 @@ import java.util.List; public interface MoldBrandMapper extends BaseMapperX { default PageResult selectPage(MoldBrandPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() +// return selectPage(reqVO, new LambdaQueryWrapperX() +// .eqIfPresent(MoldBrandDO::getCode, reqVO.getCode()) +// .likeIfPresent(MoldBrandDO::getName, reqVO.getName()) +// .eqIfPresent(MoldBrandDO::getMoldType, reqVO.getMoldType()) +// .eqIfPresent(MoldBrandDO::getProductId, reqVO.getProductId()) +// .eqIfPresent(MoldBrandDO::getUseTime, reqVO.getUseTime()) +// .eqIfPresent(MoldBrandDO::getMaintainType, reqVO.getMaintainType()) +// .eqIfPresent(MoldBrandDO::getMaintainTime, reqVO.getMaintainTime()) +// .eqIfPresent(MoldBrandDO::getMoldSize, reqVO.getMoldSize()) +// .eqIfPresent(MoldBrandDO::getRemark, reqVO.getRemark()) +// .eqIfPresent(MoldBrandDO::getIsEnable, reqVO.getIsEnable()) +// .eqIfPresent(MoldBrandDO::getOrgType, reqVO.getOrgType()) +// .betweenIfPresent(MoldBrandDO::getCreateTime, reqVO.getCreateTime()) +// .orderByDesc(MoldBrandDO::getId)); + + LambdaQueryWrapperX moldBrandDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); + moldBrandDOLambdaQueryWrapperX .eqIfPresent(MoldBrandDO::getCode, reqVO.getCode()) .likeIfPresent(MoldBrandDO::getName, reqVO.getName()) .eqIfPresent(MoldBrandDO::getMoldType, reqVO.getMoldType()) @@ -29,8 +49,24 @@ public interface MoldBrandMapper extends BaseMapperX { .eqIfPresent(MoldBrandDO::getMoldSize, reqVO.getMoldSize()) .eqIfPresent(MoldBrandDO::getRemark, reqVO.getRemark()) .eqIfPresent(MoldBrandDO::getIsEnable, reqVO.getIsEnable()) + .eqIfPresent(MoldBrandDO::getOrgType, reqVO.getOrgType()) .betweenIfPresent(MoldBrandDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(MoldBrandDO::getId)); + .orderByDesc(MoldBrandDO::getId); + + // 单独处理 ids 条件 + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + moldBrandDOLambdaQueryWrapperX.in(MoldBrandDO::getId, idList); + } + + return selectPage(reqVO, moldBrandDOLambdaQueryWrapperX); + + + + } default List selectBy(MoldBrandPageReqVO reqVO) { return selectList(new LambdaQueryWrapperX() @@ -44,6 +80,7 @@ public interface MoldBrandMapper extends BaseMapperX { .eqIfPresent(MoldBrandDO::getMoldSize, reqVO.getMoldSize()) .eqIfPresent(MoldBrandDO::getRemark, reqVO.getRemark()) .eqIfPresent(MoldBrandDO::getIsEnable, reqVO.getIsEnable()) + .eqIfPresent(MoldBrandDO::getOrgType, reqVO.getOrgType()) .betweenIfPresent(MoldBrandDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(MoldBrandDO::getId)); } diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandService.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandService.java index 434ae68519..2109fd7253 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandService.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandService.java @@ -147,4 +147,6 @@ public interface MoldBrandService { * @return 模具产品 */ MoldBrandProductDO getMoldBrandProduct(Long id); + + List getAllList(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandServiceImpl.java index 66d2444846..988cc04bdc 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/mold/MoldBrandServiceImpl.java @@ -91,11 +91,13 @@ public class MoldBrandServiceImpl implements MoldBrandService { public List selectBy(MoldBrandPageReqVO reqVO){ return moldBrandMapper.selectBy(reqVO); } + @Override public PageResult getMoldBrandPage(MoldBrandPageReqVO pageReqVO) { PageResult pageResult = moldBrandMapper.selectPage(pageReqVO); - return new PageResult<>(buildMoldBrandVOList(pageResult.getList()),pageResult.getTotal()); + return new PageResult<>(buildMoldBrandVOList(pageResult.getList()), pageResult.getTotal()); } + private List buildMoldBrandVOList(List list) { if (CollUtil.isEmpty(list)) { return Collections.emptyList(); @@ -231,4 +233,9 @@ public class MoldBrandServiceImpl implements MoldBrandService { private void deleteMoldBrandProductByBrandId(Long brandId) { moldBrandProductMapper.deleteByBrandId(brandId); } + + @Override + public List getAllList() { + return moldMapper.selectList(); + } } \ 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/recipedevicerecord/RecipeDeviceRecordController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/RecipeDeviceRecordController.java index 27d9e12438..40c8818530 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/RecipeDeviceRecordController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/RecipeDeviceRecordController.java @@ -1,5 +1,16 @@ package cn.iocoder.yudao.module.iot.controller.admin.recipedevicerecord; +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.recipepointrecord.vo.RecipePointRecordSaveReqVO; +import cn.iocoder.yudao.module.iot.dal.dataobject.recipe.RecipeDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.recipeplandetail.RecipePlanDetailDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.recipepointrecord.RecipePointRecordDO; +import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO; +import cn.iocoder.yudao.module.iot.service.device.DeviceService; +import cn.iocoder.yudao.module.iot.service.recipe.RecipeService; +import cn.iocoder.yudao.module.iot.service.recipeplandetail.RecipePlanDetailService; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -30,43 +41,23 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.recipedevicerecord.RecipeDevic import cn.iocoder.yudao.module.iot.service.recipedevicerecord.RecipeDeviceRecordService; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; + import javax.validation.constraints.*; import javax.validation.*; import javax.servlet.http.*; import java.util.*; -import java.io.IOException; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; -import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; import cn.iocoder.yudao.module.iot.controller.admin.recipedevicerecord.vo.*; -import cn.iocoder.yudao.module.iot.dal.dataobject.recipedevicerecord.RecipeDeviceRecordDO; -import cn.iocoder.yudao.module.iot.service.recipedevicerecord.RecipeDeviceRecordService; + // 新增必要的导入 import cn.iocoder.yudao.module.iot.service.recipedeviceattribute.RecipeDeviceAttributeService; import cn.iocoder.yudao.module.iot.service.device.TDengineService; import cn.iocoder.yudao.module.iot.dal.dataobject.recipedeviceattribute.RecipeDeviceAttributeDO; -import cn.iocoder.yudao.module.iot.dal.dataobject.recipepoint.RecipePointDO; import cn.iocoder.yudao.module.iot.service.recipepoint.RecipePointService; -import cn.iocoder.yudao.module.iot.dal.dataobject.recipepointrecord.RecipePointRecordDO; import cn.iocoder.yudao.module.iot.service.recipepointrecord.RecipePointRecordService; @Tag(name = "管理后台 - 设备点位采集值记录") @@ -80,6 +71,13 @@ public class RecipeDeviceRecordController { // 新增注入的服务 @Resource private RecipeDeviceAttributeService recipeDeviceAttributeService; + + @Resource + private RecipePlanDetailService recipePlanDetailService; + + @Resource + private RecipeService recipeService; + @Resource private TDengineService tDengineService; @Resource @@ -89,6 +87,11 @@ public class RecipeDeviceRecordController { @Resource private ObjectMapper objectMapper; + @Resource + private DeviceService deviceService; + + + @PostMapping("/create") @Operation(summary = "创建设备点位采集值记录") @PreAuthorize("@ss.hasPermission('iot:recipe-device-record:create')") @@ -145,117 +148,53 @@ public class RecipeDeviceRecordController { + /** + * 批量创建设备点位采集记录和配方点位记录 + * @param recipeId 配方ID + * @param pointList 点位列表 [{id: 1, refer: "参考值1"}, {id: 2, refer: "参考值2"}] + * @return 创建结果 + * @throws JsonProcessingException JSON处理异常 + */ + @PostMapping("/batch-create") + @Operation(summary = "批量创建设备点位采集记录和配方点位记录") + @PreAuthorize("@ss.hasPermission('iot:recipe-device-record:create')") + public CommonResult batchCreateRecipeDeviceRecord( + @RequestParam("id") Long recipeId) { + + + RecipePlanDetailDO recipePlanDetailDO = recipePlanDetailService.getRecipePlanDetail(recipeId); + //RecipeRespVO recipeRespVO = recipeService.getRecipeWithDeviceId(recipePlanDetailDO.getRecipeId()); + //RecipeDO recipeDO = recipeService.getRecipe(recipePlanDetailDO.getRecipeId()); + // ========== 第一步:查询配方关联的点位属性信息 ========== + // 1.1 根据recipeId查询iot_recipe_device_attribute表记录 -// -// -// /** -// * 批量创建设备点位采集记录和配方点位记录 -// * @param recipeId 配方ID -// * @param pointList 点位列表 [{id: 1, refer: "参考值1"}, {id: 2, refer: "参考值2"}] -// * @return 创建结果 -// * @throws JsonProcessingException JSON处理异常 -// */ -// @PostMapping("/batch-create") -// @Operation(summary = "批量创建设备点位采集记录和配方点位记录") -// @PreAuthorize("@ss.hasPermission('iot:recipe-device-record:create')") -// public CommonResult batchCreateRecipeDeviceRecord( -// @RequestParam("recipeId") Long recipeId, -// @RequestBody List pointList) throws JsonProcessingException { -// -// // ========== 第一步:查询配方关联的点位属性信息 ========== -// // 1.1 根据recipeId查询iot_recipe_device_attribute表记录 -// List attributeList = recipeDeviceAttributeService.getByRecipeId(recipeId); + recipePlanDetailDO.setRecipeId(32L); + List attributeList = recipeDeviceAttributeService.getByRecipeId(recipePlanDetailDO.getRecipeId()); // if (CollectionUtils.isEmpty(attributeList)) { // return success(false); // 无关联属性,直接返回 // } -// -// // 1.2 构建attributeName -> (attributeId, dataUnit)的映射关系 -// Map attributeMap = new HashMap<>(); -// for (RecipeDeviceAttributeDO attributeDO : attributeList) { -// // 根据attribute_id查询iot_device_contact_model表获取attribute_name和data_unit -// // 假设通过service方法获取,需根据实际业务调整 -// Map modelAttr = recipeDeviceAttributeService.getDeviceContactModelAttr(attributeDO.getAttributeId()); -// String attributeName = modelAttr.get("attributeName"); -// String dataUnit = modelAttr.get("dataUnit"); -// -// attributeMap.put(attributeName, new AttributeInfo( -// attributeDO.getId(), attributeName, dataUnit, attributeDO.getDeviceId())); -// } -// -// // ========== 第二步:获取设备运行参数并创建设备点位采集记录 ========== -// // 2.1 获取设备运行参数JSON数据(复用singleDevice逻辑,取第一个设备ID) -// if (attributeList.isEmpty()) { -// return success(false); -// } -// Long deviceId = attributeList.get(0).getDeviceId(); -// Map>> deviceData = recipeDeviceAttributeService.singleDevice(deviceId); -// -// // 2.2 解析JSON数据并匹配属性名 -// if (deviceData != null && deviceData.containsKey("data")) { -// // 解析嵌套的data节点(适配示例JSON结构) -// String dataJson = objectMapper.writeValueAsString(deviceData.get("data")); -// JsonNode dataNode = objectMapper.readTree(dataJson); -// -// // 遍历所有数据分类(设备基础数据、班次信息等) -// Iterator> categoryIterator = dataNode.fields(); -// while (categoryIterator.hasNext()) { -// Map.Entry categoryEntry = categoryIterator.next(); -// JsonNode attrListNode = categoryEntry.getValue(); -// -// // 遍历分类下的每个属性 -// if (attrListNode.isArray()) { -// for (JsonNode attrNode : attrListNode) { -// String attributeName = attrNode.get("attributeName").asText(); -// JsonNode addressValueNode = attrNode.get("addressValue"); -// Object addressValue = addressValueNode.isNull() ? null : -// (addressValueNode.isNumber() ? addressValueNode.numberValue() : addressValueNode.textValue()); -// -// // 匹配第一步的属性名,匹配成功则创建记录 -// if (attributeMap.containsKey(attributeName)) { -// AttributeInfo attrInfo = attributeMap.get(attributeName); -// -// // 构建设备点位采集记录DO -// RecipeDeviceRecordDO recordDO = new RecipeDeviceRecordDO(); -// recordDO.setRecipeId(recipeId); -// recordDO.setAttributeName(attributeName); -// recordDO.setAddressValue(addressValue != null ? addressValue.toString() : null); -// recordDO.setDataUnit(attrInfo.getDataUnit()); -// recordDO.setDeviceId(deviceId); -// -// // 创建记录 -// recipeDeviceRecordService.createRecipeDeviceRecord(recordDO); -// } -// } -// } -// } -// } -// -// // ========== 第三步:创建配方点位记录 ========== -// for (PointReferVO pointVO : pointList) { -// // 3.1 根据id查询iot_recipe_point表记录 -// RecipePointDO pointDO = recipePointService.getRecipePoint(pointVO.getId()); -// if (pointDO == null) { -// continue; // 点位不存在则跳过 -// } -// -// // 3.2 构建配方点位记录DO -// RecipePointRecordDO pointRecordDO = new RecipePointRecordDO(); -// pointRecordDO.setPointId(pointDO.getId()); -// pointRecordDO.setName(pointDO.getName()); -// pointRecordDO.setMax(pointDO.getMax()); -// pointRecordDO.setMin(pointDO.getMin()); -// pointRecordDO.setDataUnit(pointDO.getDataUnit()); -// pointRecordDO.setRemark(pointDO.getRemark()); -// pointRecordDO.setRefer(pointVO.getRefer()); // 入参的refer值 -// pointRecordDO.setRecipeId(recipeId); -// -// // 3.3 创建配方点位记录 -// recipePointRecordService.createRecipePointRecord(pointRecordDO); -// } -// -// return success(true); -// } + Map> deviceDataMap = deviceService.createDeviceDataMap(103L);//recipeRespVO.getDeviceId() + + for (RecipeDeviceAttributeDO attributeDO : attributeList) { + Map data = deviceDataMap.get(attributeDO.getAttributeId()); + if (data != null ) { + // 创建 + RecipeDeviceRecordDO recipeDeviceRecordDO = new RecipeDeviceRecordDO(); + recipeDeviceRecordDO.setRecipeId(recipeId); + recipeDeviceRecordDO.setAttributeCode(attributeDO.getAttributeName()); + recipeDeviceRecordDO.setDataType(attributeDO.getDataType()); + recipeDeviceRecordDO.setDataUnit(attributeDO.getDataUnit()); + if (data.get("addressValue") != null && data.get("addressValue").toString() != null) { + recipeDeviceRecordDO.setValue(data.get("addressValue").toString()); + } + recipeDeviceRecordService.createRecipeDeviceRecord(BeanUtils.toBean(recipeDeviceRecordDO, RecipeDeviceRecordSaveReqVO.class)); + + } + } + + return success(true); + } // ========== 内部辅助类 ========== /** diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/vo/RecipeDeviceRecordPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/vo/RecipeDeviceRecordPageReqVO.java index d13e337b3d..3cc8aeefd6 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/vo/RecipeDeviceRecordPageReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/vo/RecipeDeviceRecordPageReqVO.java @@ -49,4 +49,7 @@ public class RecipeDeviceRecordPageReqVO extends PageParam { @Schema(description = "采集值") private Double value; + @Schema(description = "配方id", example = "32535") + private Long recipeId; + } \ 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/recipedevicerecord/vo/RecipeDeviceRecordRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/vo/RecipeDeviceRecordRespVO.java index 3e1df78b51..ce44732332 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/vo/RecipeDeviceRecordRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/vo/RecipeDeviceRecordRespVO.java @@ -58,6 +58,9 @@ public class RecipeDeviceRecordRespVO { @Schema(description = "采集值") @ExcelProperty("采集值") - private Double value; + private String value; + + @Schema(description = "配方id", example = "32535") + private Long recipeId; } \ 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/recipedevicerecord/vo/RecipeDeviceRecordSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/vo/RecipeDeviceRecordSaveReqVO.java index f50f8fdff8..2bb926699f 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/vo/RecipeDeviceRecordSaveReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedevicerecord/vo/RecipeDeviceRecordSaveReqVO.java @@ -40,6 +40,9 @@ public class RecipeDeviceRecordSaveReqVO { private Long deviceId; @Schema(description = "采集值") - private Double value; + private String value; + + @Schema(description = "配方id", example = "32535") + private Long recipeId; } \ 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/recipeplandetail/RecipePlanDetailController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipeplandetail/RecipePlanDetailController.java index b311b6137f..750b03070a 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipeplandetail/RecipePlanDetailController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipeplandetail/RecipePlanDetailController.java @@ -38,6 +38,7 @@ public class RecipePlanDetailController { @Resource private RecipePlanDetailService recipePlanDetailService; + @PostMapping("/create") @Operation(summary = "创建配方计划详情表(配方库)") @PreAuthorize("@ss.hasPermission('iot:recipe-plan-detail:create')") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/RecipePointController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/RecipePointController.java index 24e81b77e4..6ce8572be0 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/RecipePointController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/RecipePointController.java @@ -92,4 +92,13 @@ public class RecipePointController { BeanUtils.toBean(list, RecipePointRespVO.class)); } + @GetMapping("/list") + @Operation(summary = "获得手动配置参数表(绑定配方)分页") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('iot:recipe-point:query')") + public CommonResult> getRecipePointList(@RequestParam("id") Long recipeId) { + List list = recipePointService.getRecipePointPageList(recipeId); + return success(BeanUtils.toBean(list, RecipePointRespVO.class)); + } + } \ 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/recipepointrecord/RecipePointRecordController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepointrecord/RecipePointRecordController.java index 2cbf672dfe..bc76dc6b97 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepointrecord/RecipePointRecordController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepointrecord/RecipePointRecordController.java @@ -92,4 +92,15 @@ public class RecipePointRecordController { BeanUtils.toBean(list, RecipePointRecordRespVO.class)); } + @PostMapping("/batch-create") + @Operation(summary = "批量创建IoT配方点位记录") + @PreAuthorize("@ss.hasPermission('iot:recipe-point-record:create')") + public CommonResult createRecipePointRecordBatch(@Valid @RequestBody List createReqVOList) { + for (RecipePointRecordSaveReqVO createReqVO : createReqVOList) { + createReqVO.setId(null); + recipePointRecordService.createRecipePointRecord(createReqVO); + } + return success(true); + } + } \ 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/recipedevicerecord/RecipeDeviceRecordDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipedevicerecord/RecipeDeviceRecordDO.java index 0976c28df2..9c02b2c5ac 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipedevicerecord/RecipeDeviceRecordDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipedevicerecord/RecipeDeviceRecordDO.java @@ -66,6 +66,11 @@ public class RecipeDeviceRecordDO extends BaseDO { /** * 采集值 */ - private Double value; + private String value; + + /** + * 配方id + */ + private Long recipeId; } \ 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/recipepointrecord/RecipePointRecordDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipepointrecord/RecipePointRecordDO.java index 5bf91c917a..607d8bc320 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipepointrecord/RecipePointRecordDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipepointrecord/RecipePointRecordDO.java @@ -61,6 +61,6 @@ public class RecipePointRecordDO extends BaseDO { /** * 参考值 */ - private BigDecimal refer; + private String refer; } \ 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/recipedeviceattribute/RecipeDeviceAttributeMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedeviceattribute/RecipeDeviceAttributeMapper.java index b2bd32d3c4..76c7ab31b7 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedeviceattribute/RecipeDeviceAttributeMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedeviceattribute/RecipeDeviceAttributeMapper.java @@ -103,7 +103,9 @@ public interface RecipeDeviceAttributeMapper extends BaseMapperX selectByRecipeId(@Param("recipeId") Long recipeId); + default List selectByRecipeId(@Param("recipeId") Long recipeId) { + return selectList(RecipeDeviceAttributeDO::getRecipeId, recipeId); + }; // 分页关联查询 PageResult selectPageWithAttribute(RecipeDeviceAttributePageReqVO reqVO); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedevicerecord/RecipeDeviceRecordMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedevicerecord/RecipeDeviceRecordMapper.java index a90ff279e2..f1f9dbfd0e 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedevicerecord/RecipeDeviceRecordMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedevicerecord/RecipeDeviceRecordMapper.java @@ -28,6 +28,7 @@ public interface RecipeDeviceRecordMapper extends BaseMapperX { .eqIfPresent(RecipePointDO::getRefer, reqVO.getRefer()) .orderByDesc(RecipePointDO::getId)); } - + default List selectList(Long recipeId) { + return selectList(RecipePointDO::getRecipeId, recipeId); + } } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceService.java index 17d931fbae..b04f2d8534 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceService.java @@ -123,4 +123,6 @@ public interface DeviceService { List> historyRecord(Long deviceId,String collectionStartTime, String collectionEndTime); + Map> createDeviceDataMap(Long deviceId); + } \ No newline at end of file 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 a0686fd5fa..d00a25d90f 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 @@ -236,13 +236,10 @@ public class DeviceServiceImpl implements DeviceService { } } - - return deviceModelAttributeDOPageResult; - - } + @Override public Map> createDeviceDataMap(Long deviceId) { // 创建结果Map:键为数据记录ID (Long),值为该条记录的详细信息 (Map) Map> resultMap = new HashMap<>(); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointService.java index c8d6cb3fe5..416fd71c03 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointService.java @@ -52,6 +52,6 @@ public interface RecipePointService { */ PageResult getRecipePointPage(RecipePointPageReqVO pageReqVO); - + List getRecipePointPageList(Long recipeId); } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java index 2cee739c38..7293387f0f 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java @@ -74,5 +74,8 @@ public class RecipePointServiceImpl implements RecipePointService { return Optional.ofNullable(recipePointMapper.selectById(id)) .orElse(null); } - + @Override + public List getRecipePointPageList(Long recipeId) { + return recipePointMapper.selectList(recipeId); + } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetPageReqVO.java index 64c716adbd..783ecf8036 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetPageReqVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetPageReqVO.java @@ -18,17 +18,20 @@ public class MoldGetPageReqVO extends PageParam { @Schema(description = "领模单号", example = "2476") private Long orderId; - @Schema(description = "模具编码") - private String code; + @Schema(description = "关联模具id") + private Long moldId; @Schema(description = "模具名称", example = "张三") - private String name; + private String moldName; @Schema(description = "状态") private String state; @Schema(description = "领模人") - private String person; + private Long person; + + @Schema(description = "领模人") + private String personName; @Schema(description = "设备id", example = "1850") private Long deviceId; diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetRespVO.java index 7a0b56422a..c0f8effab2 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetRespVO.java @@ -20,6 +20,9 @@ public class MoldGetRespVO { @ExcelProperty("领模单号") private Long orderId; + @Schema(description = "关联模具id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long moldId; + @Schema(description = "模具编码", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("模具编码") private String code; @@ -32,9 +35,12 @@ public class MoldGetRespVO { @ExcelProperty("状态") private String state; + @Schema(description = "领模人id") + private Long person; + @Schema(description = "领模人") @ExcelProperty("领模人") - private String person; + private String personName; @Schema(description = "设备id", example = "1850") @ExcelProperty("设备id") diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetSaveReqVO.java index 2b973a229a..e5cbf8b917 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetSaveReqVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldget/vo/MoldGetSaveReqVO.java @@ -20,10 +20,9 @@ public class MoldGetSaveReqVO { @Schema(description = "模具编码", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "模具编码不能为空") - private String code; + private Long moldId; - @Schema(description = "模具名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") - @NotEmpty(message = "模具名称不能为空") + @Schema(description = "模具名称", example = "张三") private String name; @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED) @@ -31,7 +30,7 @@ public class MoldGetSaveReqVO { private String state; @Schema(description = "领模人") - private String person; + private Long person; @Schema(description = "设备id", example = "1850") private Long deviceId; diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java index 2af0c65a6d..fc58436c02 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java @@ -207,6 +207,7 @@ public class PlanController { // 入库 else if ("store".equals(statusUpdateVO.getCode())) { planDO.setStatus(PlanStatusEnum.已入库.getValue()); + planService.createPlanStockIn(statusUpdateVO,planDO); } planMapper.updateById(planDO); return success(true); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldget/MoldGetDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldget/MoldGetDO.java index b832aa04e6..fc63789aa8 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldget/MoldGetDO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldget/MoldGetDO.java @@ -35,7 +35,7 @@ public class MoldGetDO extends BaseDO { /** * 模具编码 */ - private String code; + private Long moldId; /** * 模具名称 */ @@ -47,7 +47,7 @@ public class MoldGetDO extends BaseDO { /** * 领模人 */ - private String person; + private Long person; /** * 设备id */ diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldget/MoldGetMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldget/MoldGetMapper.java index eac8488400..60fb2f4755 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldget/MoldGetMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldget/MoldGetMapper.java @@ -20,8 +20,8 @@ public interface MoldGetMapper extends BaseMapperX { default PageResult selectPage(MoldGetPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(MoldGetDO::getOrderId, reqVO.getOrderId()) - .eqIfPresent(MoldGetDO::getCode, reqVO.getCode()) - .likeIfPresent(MoldGetDO::getName, reqVO.getName()) + .eqIfPresent(MoldGetDO::getMoldId, reqVO.getMoldId()) + .likeIfPresent(MoldGetDO::getName, reqVO.getMoldName()) .eqIfPresent(MoldGetDO::getState, reqVO.getState()) .eqIfPresent(MoldGetDO::getPerson, reqVO.getPerson()) .eqIfPresent(MoldGetDO::getDeviceId, reqVO.getDeviceId()) diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java index a72bc26b7a..39c044c922 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequi import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanRespVO; import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanStatusUpdateVO; import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO; import cn.iocoder.yudao.module.mes.service.itemrequisition.entity.ItemRequisitionAndStock; @@ -93,4 +94,6 @@ public interface PlanService { List getProductByPlanStatus(List statusList); List getPlanBy(PlanPageReqVO pageReqVO); + + void createPlanStockIn(PlanStatusUpdateVO statusUpdateVO,PlanDO planDO); } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java index ef12354f10..72ec26bc02 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java @@ -5,17 +5,16 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO; +import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInSaveReqVO; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.out.ErpStockOutSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.service.product.ErpProductService; +import cn.iocoder.yudao.module.erp.service.stock.ErpStockInService; import cn.iocoder.yudao.module.erp.service.stock.ErpStockOutService; import cn.iocoder.yudao.module.erp.service.stock.ErpStockService; import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionSaveReqVO; import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionStatusEnum; -import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanPageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanRespVO; -import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanSaveReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanStatusEnum; +import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.*; import cn.iocoder.yudao.module.mes.controller.admin.task.vo.TaskStatusEnum; import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDetailDO; import cn.iocoder.yudao.module.mes.dal.dataobject.paigongrecord.PaigongRecordDO; @@ -70,7 +69,10 @@ public class PlanServiceImpl implements PlanService { private ItemAnalysisService analysisService; @Resource - private ErpStockOutService stockService; + private ErpStockOutService stockOutService; + + @Resource + private ErpStockInService stockInService; @Override @Transactional(rollbackFor = Exception.class) @@ -136,16 +138,38 @@ public class PlanServiceImpl implements PlanService { stockOut.setOutType("领料出库"); for (ItemRequisitionAndStock requisition : list) { ErpStockOutSaveReqVO.Item item = new ErpStockOutSaveReqVO.Item(); + // todo 修改仓库 item.setWarehouseId(3L); item.setProductId(requisition.getItemId()); item.setCount(requisition.getNumber()); itemList.add(item); } stockOut.setItems(itemList); - stockService.createStockOut(stockOut); + stockOutService.createStockOut(stockOut); return plan.getId(); } + @Override + @Transactional(rollbackFor = Exception.class) + public void createPlanStockIn(PlanStatusUpdateVO statusUpdateVO,PlanDO planDO) { + // 创建入产品入库单 + ErpStockInSaveReqVO stockIn = new ErpStockInSaveReqVO(); + List itemList = new ArrayList<>(); + stockIn.setInTime(LocalDateTime.now()); + stockIn.setInType("产品入库"); + ErpStockInSaveReqVO.Item item = new ErpStockInSaveReqVO.Item(); + // todo 修改仓库 + item.setWarehouseId(4L); + item.setProductId(planDO.getProductId()); + if (planDO.getPassNumber() == null) { + planDO.setPassNumber(0L); + } + item.setCount(BigDecimal.valueOf(planDO.getPassNumber())); + itemList.add(item); + stockIn.setItems(itemList); + stockInService.createStockIn(stockIn); + } + @Override public void updatePlan(PlanSaveReqVO updateReqVO) { // 校验存在