干燥机配套车间生产管理系统/云平台服务端
baoshiwei
2025-11-28 567096dae7f467d04883f11b17f667b6cef5f536
feat(dry): 新增干燥配方上传功能

- 新增 HerbFormulaBo 数据传输对象类
- 在 DryHerbFormula 实体中增加从 HerbFormulaBo 构造的构造函数
- 控制器中添加 saveFormula 接口用于接收并处理配方数据
- 添加日志打印便于调试新增接口
- 实现 saveOrUpdateFormula 方法支持配方的保存或更新逻辑
- 验证设备 IP 地址与租户信息确保数据安全
- 服务层接口新增 saveOrUpdateFormula 方法定义
已添加1个文件
已修改5个文件
121 ■■■■■ 文件已修改
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/Bo/HerbFormulaBo.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerbFormula.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryHerbFormulaController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryHerbFormulaService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryHerbFormulaServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/Bo/HerbFormulaBo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package org.jeecg.modules.dry.Bo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class HerbFormulaBo {
    @ApiModelProperty(value = "设备编号")
    private String eqpCode;
    private String eqpType;
    @ApiModelProperty(value = "配方名称")
    private String name;
    @ApiModelProperty(value = "缩写")
    private String abbr;
    @ApiModelProperty(value = "特种物料")
    private String special;
    @ApiModelProperty(value = "轻质物料")
    private String light;
    @ApiModelProperty(value = "初始含水率")
    private Double initial;
    @ApiModelProperty(value = "目标含水率")
    private Double target;
    @ApiModelProperty(value = "投料量")
    private Integer feed;
    @ApiModelProperty(value = "预计干燥时间")
    private Integer et;
    @ApiModelProperty(value = "热风温度")
    private Double windTemp;
    @ApiModelProperty(value = "初始风机频率")
    private Integer fanSpeed;
    @ApiModelProperty(value = "翻料策略")
    private String strategy;
    @ApiModelProperty(value = "冷风时长")
    private Integer coolingDuration;
    @ApiModelProperty(value = "启用标志")
    private String enabled;
    /**租户id*/
    @ApiModelProperty(value = "租户id")
    private Integer tenantId;
}
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerbFormula.java
@@ -8,6 +8,8 @@
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.jeecg.modules.dry.Bo.HerbFormulaBo;
import org.jeecg.modules.dry.vo.HerbFormulaVo;
import org.jeecg.modules.dry.vo.RealTimeDataVo;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
@@ -167,4 +169,22 @@
        this.et = realTimeDataVo.getTime1();
        this.tenantId = realTimeDataVo.getTenantid();
    }
    public DryHerbFormula(HerbFormulaBo formulaBo) {
        this.eqpType = formulaBo.getEqpType();
        this.name = formulaBo.getName();
        this.abbr = formulaBo.getAbbr();
        this.special = formulaBo.getSpecial();
        this.light = formulaBo.getLight();
        this.initial = formulaBo.getInitial();
        this.target = formulaBo.getTarget();
        this.feed = formulaBo.getFeed();
        this.et = formulaBo.getEt();
        this.windTemp = formulaBo.getWindTemp();
        this.fanSpeed = formulaBo.getFanSpeed();
        this.strategy = formulaBo.getStrategy();
        this.coolingDuration = formulaBo.getCoolingDuration();
        this.enabled = formulaBo.getEnabled();
    }
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryHerbFormulaController.java
@@ -93,6 +93,8 @@
    @RequiresPermissions("dry:dry_herb_formula:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody DryHerbFormula dryHerbFormula) {
        log.info("添加参数:" + dryHerbFormula.toString());
        dryHerbFormulaService.save(dryHerbFormula);
        return Result.OK("添加成功!");
    }
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java
@@ -12,9 +12,11 @@
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.config.TenantContext;
import org.jeecg.common.constant.MqttConstant;
import org.jeecg.common.util.IpUtils;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.dry.Bo.HerbFormulaBo;
import org.jeecg.modules.dry.entity.*;
import org.jeecg.modules.dry.mqtt.MqttConfig;
import org.jeecg.modules.dry.mqtt.MqttUtil;
@@ -278,6 +280,38 @@
    }
    /**
     *  drying formula upload
     * @param formulaBo
     * @return
     */
    @ApiOperation(value = "干燥配方上传", notes = "干燥配方新增或更新")
    @PostMapping(value = "/saveFormula")
    public Result<?> saveFormula(@RequestBody HerbFormulaBo formulaBo) {
        TenantContext.setTenant(formulaBo.getTenantId()+"");
        //获取request
        HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
        // èŽ·å–è¯·æ±‚ä¸»æœºçš„IP地址
        String ip = IpUtils.getIpAddr(request);
        DryEquipment dryEquipment = dryEquipmentService.selectByTenantIdEquipmentId(formulaBo.getTenantId() + "", formulaBo.getEqpCode());
        if (dryEquipment != null) {
            if (dryEquipment.getIp().equals(ip)) {
            } else {
                return Result.error("设备IP地址未配置:" + ip);
            }
        } else {
            return Result.error("设备不存在");
        }
        formulaBo.setEqpType(dryEquipment.getType());
        dryHerbFormulaService.saveOrUpdateFormula(formulaBo);
        return Result.ok("保存成功");
    }
    @ApiOperation(value = "干燥配方上报", notes = "干燥配方记录上报")
    @PostMapping(value = "/sendFormulaHistory")
    public Result<?> sendFormulaHistory(DryHerbFormulaHisVo hisVo) {
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryHerbFormulaService.java
@@ -1,7 +1,9 @@
package org.jeecg.modules.dry.service;
import org.jeecg.modules.dry.Bo.HerbFormulaBo;
import org.jeecg.modules.dry.entity.DryHerbFormula;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.dry.vo.HerbFormulaVo;
/**
 * @Description: å¹²ç‡¥é…æ–¹
@@ -11,4 +13,5 @@
 */
public interface IDryHerbFormulaService extends IService<DryHerbFormula> {
    void saveOrUpdateFormula(HerbFormulaBo formulaBo);
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryHerbFormulaServiceImpl.java
@@ -1,8 +1,11 @@
package org.jeecg.modules.dry.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.jeecg.modules.dry.Bo.HerbFormulaBo;
import org.jeecg.modules.dry.entity.DryHerbFormula;
import org.jeecg.modules.dry.mapper.DryHerbFormulaMapper;
import org.jeecg.modules.dry.service.IDryHerbFormulaService;
import org.jeecg.modules.dry.vo.HerbFormulaVo;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -16,4 +19,22 @@
@Service
public class DryHerbFormulaServiceImpl extends ServiceImpl<DryHerbFormulaMapper, DryHerbFormula> implements IDryHerbFormulaService {
    @Override
public void saveOrUpdateFormula(HerbFormulaBo formulaBo) {
        DryHerbFormula formula = new DryHerbFormula(formulaBo);
        LambdaQueryWrapper<DryHerbFormula> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(DryHerbFormula::getEqpType, formula.getEqpType());
        queryWrapper.eq(DryHerbFormula::getName, formula.getName());
        DryHerbFormula existingFormula = baseMapper.selectOne(queryWrapper);
        if (existingFormula != null) {
            // å¦‚果存在,则更新记录,需要设置ID以确保更新正确的记录
            formula.setId(existingFormula.getId());
            updateById(formula);
        } else {
            // å¦‚果不存在,则插入新记录
            save( formula);
        }
    }
}