lxw
2023-04-12 9051f75ff0d2d26fd716b3c17b5b2b51b988de9e
9149并联电源
5个文件已添加
445 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/Fbs9149SetparamController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/Fbs9149SetparamMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/Fbs9149Setparam.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/Fbs9149SetparamService.java 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/Fbs9149SetparamMapper.xml 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/Fbs9149SetparamController.java
New file
@@ -0,0 +1,38 @@
package com.whyc.controller;
import com.whyc.dto.Response;
import com.whyc.pojo.Fbs9149Setparam;
import com.whyc.service.Fbs9149SetparamService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(tags = "作业管理-放电计划管理")
@RestController
@RequestMapping("fbs9149Setparam")
public class Fbs9149SetparamController {
    @Autowired
    private Fbs9149SetparamService service;
    @ApiOperation(tags = "在线监测-实时监控", value = "在线监测-实时监控-读取并联电源9149放电参数")
    @GetMapping("searchParalleParam9149")
    public Response searchParalleParam9149(@RequestParam int opCmd, @RequestParam int paramtype, @RequestParam int devId) {
        return service.searchParalleParam9149(opCmd, paramtype, devId);
    }
    @ApiOperation(tags = "在线监测-实时监控", value = "在线监测-实时监控-控制并联电源9149充放电停止")
    @GetMapping("controllerParalle9149")
    public Response controllerParalle9149(@RequestParam int opCmd, @RequestParam int testCmd, @RequestParam String battGroupNums, @RequestParam int devId) {
        return service.controllerParalle9149(opCmd, testCmd, battGroupNums, devId);
    }
    @ApiOperation(tags = "在线监测-实时监控", value = "在线监测-实时监控-设置并联电源9149放电参数")
    @PostMapping("updateParalleParam9149")
    public Response updateParalleParam9149(@RequestBody List<Fbs9149Setparam> list) {
        return service.updateParalleParam9149(list);
    }
}
src/main/java/com/whyc/mapper/Fbs9149SetparamMapper.java
New file
@@ -0,0 +1,10 @@
package com.whyc.mapper;
import com.whyc.pojo.Fbs9149Setparam;
import java.util.List;
public interface Fbs9149SetparamMapper extends CustomMapper<Fbs9149Setparam> {
    //批量修改参数
    boolean updateList(List<Fbs9149Setparam> list);
}
src/main/java/com/whyc/pojo/Fbs9149Setparam.java
New file
@@ -0,0 +1,119 @@
package com.whyc.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * <p>
 * 并联电源9组参数表
 * </p>
 *
 * @author lxw
 * @since 2023-04-12
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(schema = "db_ram_db", value = "tb_fbs9149_setparam")
@ApiModel(value = "Fbs9149Setparam对象", description = "并联电源9组参数表")
public class Fbs9149Setparam implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "num", type = IdType.AUTO)
    private int num;
    @ApiModelProperty(value = "设备Id")
    private int devId;
    @ApiModelProperty(value = "命令字段")
    private Integer opCmd;
    @ApiModelProperty(value = "测试类型")
    private Integer testCmd;
    @ApiModelProperty(value = "组号0-组1 1-组2 2-组3 3-组4...")
    private Integer groupnum;
    @ApiModelProperty(value = "参数类型,0-实时核容参数 1-计划核容参数 2-活化参数 3-充电参数")
    private Integer paramtype;
    @ApiModelProperty(value = "0-自动  1-手动 电池管理方式")
    private Integer battauto;
    @ApiModelProperty(value = "0-开启 1-关闭 定时均充功能")
    private Integer timerchargeable;
    @ApiModelProperty(value = "50-200Ah 电池标称容量 ")
    private Integer battnominalcap;
    @ApiModelProperty(value = "电池浮充电压")
    private Float battfloatvol;
    @ApiModelProperty(value = "电池均充电压")
    private Float battchargevol;
    @ApiModelProperty(value = "电池充电限流")
    private Float battchargecurr1;
    @ApiModelProperty(value = "浮充转均充电流")
    private Float battchargecurr2;
    @ApiModelProperty(value = "均充转浮充电流")
    private Float battchargecurr3;
    @ApiModelProperty(value = "0-5H  尾电流充电时间")
    private Integer tailcurrchargetime;
    @ApiModelProperty(value = "30-180天 定时均充周期")
    private Integer timerchargeperiod;
    @ApiModelProperty(value = "最长均充时间")
    private Integer maxchargetimehour;
    @ApiModelProperty(value = "0-开启  1-关闭 温度补偿开关")
    private Integer tempcompensatedable;
    @ApiModelProperty(value = "20-80℃ 电池过温点")
    private Integer batthightemp;
    @ApiModelProperty(value = "-40-10℃  电池欠温点")
    private Integer battlowtemp;
    @ApiModelProperty(value = "10-40℃ 温补中心点")
    private Integer compensatedtemp;
    @ApiModelProperty(value = "0-50mV/℃ 温补系数")
    private Integer tempcompensatedcoe;
    @ApiModelProperty(value = "电池放电终止电压")
    private Float battdischargelowvol;
    @ApiModelProperty(value = "单节放电终止电压")
    private Float mondischargelowvol;
    @ApiModelProperty(value = "本地远程设置 0-远程 1-本地")
    private Integer localremoteset;
    @ApiModelProperty(value = "电池充电控制 0-开启 1-关闭 ")
    private Integer battchrgctrl;
    @ApiModelProperty(value = "电池放电控制  0-开启 1-关闭 ")
    private Integer battdisctrl;
    @ApiModelProperty(value = "核容限流 0.1C-0.5C  ")
    private Float herongcurr;
    @ApiModelProperty(value = "核容时限")
    private Integer herongtimehour;
}
src/main/java/com/whyc/service/Fbs9149SetparamService.java
New file
@@ -0,0 +1,192 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.whyc.dto.FBS9100_ComBase;
import com.whyc.dto.Response;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.mapper.Fbs9149SetparamMapper;
import com.whyc.pojo.Fbs9149Setparam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import static java.lang.Thread.sleep;
@Service
public class Fbs9149SetparamService {
    @Autowired(required = false)
    private Fbs9149SetparamMapper mapper;
    //并联电源的cmd和ack校验  test_type  -->默认启动测试的类型(控制)
    public boolean sendCmdToFBS9149DevCon(int cmd, int testCmd, int dev_id, int battGroupNum) {
        int m_cmd = cmd;
        int m_cmd_ack = cmd;
        switch (m_cmd) {
            case FBS9100_ComBase.CMD_Start:
                m_cmd_ack = FBS9100_ComBase.CMD_StartAck;
                break;
            case FBS9100_ComBase.CMD_Stop:
                m_cmd_ack = FBS9100_ComBase.CMD_StopAck;
                break;
            default:
                return false;
        }
        UpdateWrapper updateWrapper = new UpdateWrapper();
        updateWrapper.set("op_cmd", m_cmd);
        updateWrapper.set("test_cmd", testCmd);
        updateWrapper.eq("groupnum", battGroupNum);
        updateWrapper.eq("dev_id", dev_id);
        int flag = mapper.update(null, updateWrapper);
        boolean res_exe = false;
        if (flag > 0) {
            PageHelper.startPage(1, 1);
            QueryWrapper queryWrapper = new QueryWrapper();
            queryWrapper.eq("dev_id", dev_id);
            queryWrapper.eq("groupnum", battGroupNum);
            for (int n = 0; n < 40; n++) {
                Fbs9149Setparam fbs9149Setparam = mapper.selectOne(queryWrapper);
                if (fbs9149Setparam != null) {
                    if (fbs9149Setparam.getOpCmd() == m_cmd_ack) {
                        res_exe = true;
                        break;
                    }
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                } else {
                    break;
                }
            }
        }
        return res_exe;
    }
    //并联电源的cmd和ack校验  test_type  -->默认启动测试的类型(读取和设置参数)
    public boolean sendCmdToFBS9149DevRed(int cmd, int testType, int dev_id) {
        int m_cmd = cmd;
        int m_cmd_ack = cmd;
        switch (m_cmd) {
            case FBS9100_ComBase.CMD_GetMutilMode_Param:
                m_cmd_ack = FBS9100_ComBase.CMD_GetMutilMode_Param_Ack;
                break;
            case FBS9100_ComBase.CMD_SetMutilMode_Param:
                m_cmd_ack = FBS9100_ComBase.CMD_SetMutilMode_Param_Ack;
                break;
            default:
                return false;
        }
        UpdateWrapper updateWrapper = new UpdateWrapper();
        updateWrapper.set("op_cmd", m_cmd);
        //读取时加参数在testcmd中参数类型,0-实时核容参数 1-计划核容参数 2-活化参数 3-充电参数 HV_mon_uppernum1
        updateWrapper.set("paramtype", testType);
        updateWrapper.eq("dev_id", dev_id);
        int flag = mapper.update(null, updateWrapper);
        boolean res_exe = false;
        if (flag > 0) {
            PageHelper.startPage(1, 1);
            QueryWrapper queryWrapper = new QueryWrapper();
            queryWrapper.eq("dev_id", dev_id);
            //默认取第一个ack判断
            queryWrapper.eq("groupnum", 0);
            for (int n = 0; n < 40; n++) {
                Fbs9149Setparam fbs9149Setparam = mapper.selectOne(queryWrapper);
                if (fbs9149Setparam != null) {
                    if (fbs9149Setparam.getOpCmd() == m_cmd_ack) {
                        res_exe = true;
                        break;
                    }
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                } else {
                    break;
                }
            }
        }
        return res_exe;
    }
    //在线监测-实时监控-读取并联电源9149放电参数
    public Response searchParalleParam9149(int opCmd, int paramtype, int devId) {
        try {
            //读取时命令同步所以只监测第一组的返回ack
            //读取时加参数在testcmd中参数类型,0-实时核容参数 1-计划核容参数 2-活化参数 3-充电参数 paramtype
            boolean bl = sendCmdToFBS9149DevRed(opCmd, paramtype, devId);
            QueryWrapper wrapper = new QueryWrapper();
            wrapper.eq("dev_id", devId);
            List<Fbs9149Setparam> fbs9149Setparams = mapper.selectList(wrapper);
            return new Response().setII(1, bl, fbs9149Setparams, bl == true ? "读取电源9149参数成功!" : "读取并联电源9149参数失败,请检查网络!");
        } catch (Exception e) {
            return new Response().set(1, false, "出现异常" + e);
        }
    }
    //在线监测-实时监控-设置并联电源9149放电参数
    public Response updateParalleParam9149(List<Fbs9149Setparam> list) {
        try {
            int opCmd = 0;
            int paramtype = 0;
            int devId = 0;
            if (list != null && list.size() > 0) {
                Fbs9149Setparam setparam = list.get(0);
                opCmd = setparam.getOpCmd();
                paramtype = setparam.getParamtype();
                devId = setparam.getDevId();
            }
            boolean b = mapper.updateList(list);
            boolean bl = false;
            if (b) {
                //设置时命令同步所以只监测第一组的返回ack
                //设置时加参数在testcmd中参数类型,0-实时核容参数 1-计划核容参数 2-活化参数 3-充电参数 HV_mon_uppernum1
                bl = sendCmdToFBS9149DevRed(opCmd, paramtype, devId);
            }
            return new Response().set(1, bl, bl == true ? "修改参数成功!" : "设置并联电源参数失败,请检查网络!");
        } catch (Exception e) {
            return new Response().set(1, false, "出现异常" + e);
        }
    }
    //在线监测-实时监控-控制并联电源9149充放电停止
    public Response controllerParalle9149(int opCmd, int testCmd, String battGroupNums, int devId) {
        try {
            //读取时加参数在testcmd中参数类型,0-实时核容参数 1-计划核容参数 2-活化参数 3-充电参数 HV_mon_uppernum1
            List<String> battGroupNumList = Arrays.asList(battGroupNums.split(","));
            //多线程
            ThreadPoolExecutor pool = ThreadPoolExecutorFactory.getPoolExecutor();
            CountDownLatch latch = new CountDownLatch(battGroupNumList.size());
            Map<Integer, Boolean> resMap = new HashMap<>();
            for (int i = 0; i < battGroupNumList.size(); i++) {
                int finalI = i;
                pool.execute(() -> {
                    int finalII = finalI;
                    int battGroupNum = Integer.parseInt(battGroupNumList.get(finalII));
                    boolean bl = sendCmdToFBS9149DevCon(opCmd, testCmd, devId, battGroupNum);
                    resMap.put(battGroupNum, bl);
                    latch.countDown();
                });
                sleep(200);
            }
            latch.await(10, TimeUnit.MINUTES);
            return new Response().set(1, resMap);
        } catch (Exception e) {
            return new Response().set(1, false, "出现异常" + e);
        }
    }
}
src/main/resources/mapper/Fbs9149SetparamMapper.xml
New file
@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.whyc.mapper.Fbs9149SetparamMapper">
    <update id="updateList" parameterType="java.util.List">
        <foreach collection="list" item="param" index="index" separator=";">
            UPDATE db_ram_db.tb_fbs9149_setparam
            <set>
                <if test="param.paramtype != null">
                    paramtype = #{param.paramtype},
                </if>
                <if test="param.battauto != null">
                    battauto = #{param.battauto},
                </if>
                <if test="param.timerchargeable != null">
                    timerchargeable = #{param.timerchargeable},
                </if>
                <if test="param.battnominalcap != null">
                    battnominalcap = #{param.battnominalcap},
                </if>
                <if test="param.battfloatvol != null">
                    battfloatvol = #{param.battfloatvol},
                </if>
                <if test="param.battchargevol != null">
                    battchargevol = #{param.battchargevol},
                </if>
                <if test="param.battchargecurr1 != null">
                    battchargecurr1 = #{param.battchargecurr1},
                </if>
                <if test="param.battchargecurr2 != null">
                    battchargecurr2 = #{param.battchargecurr2},
                </if>
                <if test="param.battchargecurr3 != null">
                    battchargecurr3 = #{param.battchargecurr3},
                </if>
                <if test="param.tailcurrchargetime != null">
                    tailcurrchargetime = #{param.tailcurrchargetime},
                </if>
                <if test="param.timerchargeperiod != null">
                    timerchargeperiod = #{param.timerchargeperiod},
                </if>
                <if test="param.maxchargetimehour != null">
                    maxchargetimehour = #{param.maxchargetimehour},
                </if>
                <if test="param.tempcompensatedable != null">
                    tempcompensatedable = #{param.tempcompensatedable},
                </if>
                <if test="param.batthightemp != null">
                    batthightemp = #{param.batthightemp},
                </if>
                <if test="param.battlowtemp != null">
                    battlowtemp = #{param.battlowtemp},
                </if>
                <if test="param.compensatedtemp != null">
                    compensatedtemp = #{param.compensatedtemp},
                </if>
                <if test="param.tempcompensatedcoe != null">
                    tempcompensatedcoe = #{param.tempcompensatedcoe},
                </if>
                <if test="param.battdischargelowvol != null">
                    battdischargelowvol = #{param.battdischargelowvol},
                </if>
                <if test="param.mondischargelowvol != null">
                    mondischargelowvol = #{param.mondischargelowvol},
                </if>
                <if test="param.localremoteset != null">
                    localremoteset = #{param.localremoteset},
                </if>
                <if test="param.battchrgctrl != null">
                    battchrgctrl = #{param.battchrgctrl},
                </if>
                <if test="param.battdisctrl != null">
                    battdisctrl = #{param.battdisctrl},
                </if>
                <if test="param.herongcurr != null">
                    herongcurr = #{param.herongcurr},
                </if>
                <if test="param.herongtimehour != null">
                    herongtimehour = #{param.herongtimehour},
                </if>
            </set>
            WHERE dev_id = #{param.devId} and groupnum=#{param.groupnum}
        </foreach>
    </update>
</mapper>