zyg 2 年之前
父节点
当前提交
0e01a00042

+ 76 - 0
src/main/java/cn/fastfun/controller/api/CellModelController.java

@@ -0,0 +1,76 @@
+package cn.fastfun.controller.api;
+
+import cn.fastfun.controller.dto.CellDto;
+import cn.fastfun.controller.param.QueryParamForCellModel;
+import cn.fastfun.service.CellModelService;
+import cn.fastfun.service.vo.CellModelVo;
+import com.bridge.dto.ApiDTO;
+import com.bridge.dto.ApiPageDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * @author zyg
+ * @className CellModelController
+ * @date 2023年02月16日 11:41
+ */
+@Api(tags = "单体型号")
+@RestController
+@RequestMapping("/api/v1/cellModel")
+public class CellModelController {
+
+    private static final String OK = "OK";
+
+    @Resource
+    CellModelService cellModelService;
+
+    @ApiOperation(value = "分页搜索单体型号")
+    @PostMapping("/queryCell")
+    public ApiDTO getCellModelPageInfo(@RequestBody QueryParamForCellModel param) {
+        ApiPageDTO result = cellModelService.getCellModelPageInfo(param);
+        return ApiDTO.ok("查询成功!", result);
+    }
+
+    @ApiOperation(value = "单体型号详情")
+    @GetMapping("/cellDetail/{id}")
+    public ApiDTO getCellDetail(@PathVariable("id") String id) {
+        CellModelVo result = cellModelService.getCellDetail(id);
+        return ApiDTO.ok("查询成功!", result);
+    }
+
+    @ApiOperation(value = "删除单体型号")
+    @DeleteMapping("/delCell/{id}")
+    public ApiDTO delCell(@PathVariable("id") String id) {
+        String result = cellModelService.delCell(id);
+        if (result.equals(OK)) {
+            return ApiDTO.ok("删除成功!", result);
+        }else{
+            return ApiDTO.error(500, result);
+        }
+    }
+
+    @ApiOperation(value = "新增单体型号")
+    @PostMapping("/addCell")
+    public ApiDTO addCell(@RequestBody CellDto dto) {
+        String result = cellModelService.addCell(dto);
+        if (result.equals(OK)) {
+            return ApiDTO.ok("新增成功!", result);
+        }else{
+            return ApiDTO.error(500, result);
+        }
+    }
+
+    @ApiOperation(value = "修改单体型号")
+    @PostMapping("/modifyCell")
+    public ApiDTO modifyCell(@RequestBody CellDto dto) {
+        String result = cellModelService.modifyCell(dto);
+        if (result.equals(OK)) {
+            return ApiDTO.ok("修改成功!", result);
+        }else{
+            return ApiDTO.error(500, result);
+        }
+    }
+}

+ 106 - 0
src/main/java/cn/fastfun/controller/api/PackModelController.java

@@ -0,0 +1,106 @@
+package cn.fastfun.controller.api;
+
+import cn.fastfun.controller.dto.PackDto;
+import cn.fastfun.controller.param.QueryParamForPackModel;
+import cn.fastfun.service.PackModelService;
+import cn.fastfun.service.vo.PackModelReadyListVo;
+import cn.fastfun.service.vo.PackModelVo;
+import com.bridge.dto.ApiDTO;
+import com.bridge.dto.ApiPageDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author zyg
+ * @className PackModelController
+ * @date 2023年02月16日 11:41
+ */
+@Api(tags = "包型号")
+@RestController
+@RequestMapping("/api/v1/packModel")
+public class PackModelController {
+
+    private static final String OK = "OK";
+
+    @Resource
+    PackModelService packModelService;
+
+    @ApiOperation(value = "分页搜索包型号")
+    @PostMapping("/queryPack")
+    public ApiDTO getPackModelPageInfo(@RequestBody QueryParamForPackModel param) {
+        ApiPageDTO result = packModelService.getPackModelPageInfo(param);
+        return ApiDTO.ok("查询成功!", result);
+    }
+
+    @ApiOperation(value = "包型号详情")
+    @GetMapping("/packDetail/{id}")
+    public ApiDTO getPackDetail(@PathVariable("id") String id) {
+        PackModelVo result = packModelService.getPackDetail(id);
+        return ApiDTO.ok("查询成功!", result);
+    }
+
+    @ApiOperation(value = "删除包型号")
+    @DeleteMapping("/delPack/{id}")
+    public ApiDTO delPack(@PathVariable("id") String id) {
+        String result = packModelService.delPack(id);
+        if (result.equals(OK)) {
+            return ApiDTO.ok("删除成功!", result);
+        } else {
+            return ApiDTO.error(500, result);
+        }
+    }
+
+    @ApiOperation(value = "新增包型号")
+    @PostMapping("/addPack")
+    public ApiDTO addPack(@RequestBody PackDto dto) {
+        String result = packModelService.addPack(dto);
+        if (result.equals(OK)) {
+            return ApiDTO.ok("新增成功!", result);
+        } else {
+            return ApiDTO.error(500, result);
+        }
+    }
+
+    @ApiOperation(value = "修改包型号")
+    @PostMapping("/modifyPack")
+    public ApiDTO modifyPack(@RequestBody PackDto dto) {
+        String result = packModelService.modifyPack(dto);
+        if (result.equals(OK)) {
+            return ApiDTO.ok("修改成功!", result);
+        } else {
+            return ApiDTO.error(500, result);
+        }
+    }
+
+    @ApiOperation(value = "页面加载单体型号列表")
+    @GetMapping("/ready")
+    public ApiDTO readyForListBox() {
+        PackModelReadyListVo result = packModelService.readyForListBox();
+        return ApiDTO.ok("修改成功!", result);
+    }
+
+    @ApiOperation(value = "通过包型号获取单体型号列表")
+    @GetMapping("/cellModelByPack/{packModel}")
+    public ApiDTO getCellModelByPack(@PathVariable("packModel") String packModel) {
+        PackModelReadyListVo result = packModelService.getCellModelByPack(packModel);
+        return ApiDTO.ok("查询成功!", result);
+    }
+
+    @ApiOperation(value = "通过单体型号获取包型号列表")
+    @GetMapping("/packModelByCell/{cellModel}")
+    public ApiDTO getPackModelByCell(@PathVariable("cellModel") String cellModel) {
+        List<PackModelVo> result = packModelService.getPackModelByCell(cellModel);
+        return ApiDTO.ok("查询成功!", result);
+    }
+
+    @ApiOperation(value = "包型号列表")
+    @GetMapping("/packModelList")
+    public ApiDTO getPackModelList() {
+        List<PackModelVo> result = packModelService.getPackModelList();
+        return ApiDTO.ok("查询成功!", result);
+    }
+}

+ 19 - 19
src/main/java/cn/fastfun/controller/api/ProductController.java

@@ -25,7 +25,7 @@ public class ProductController {
 
     @ApiOperation(value = "保存SN规则信息")
     @PostMapping("/save")
-    public ApiDTO save(@RequestBody @ApiParam(name = "SN规则对象", value = "传入json格式", required = true)Product product) {
+    public ApiDTO save(@RequestBody @ApiParam(name = "SN规则对象", value = "传入json格式", required = true) Product product) {
 
 //        // 针对产品规格这一项进行操作
 //        if(product.getSnType().equals("产品规格")){
@@ -60,16 +60,16 @@ public class ProductController {
         // 校验输入的SN类型对应的编号
         String checkSnTypeCodeResult = VerifyUtil.checkSnTypeCode(product);
         List<Product> checkDuplicatedResult = productService.findAll(
-                Arrays.asList(QueryParamExp.eq("snTypeCode",product.getSnTypeCode()),
-                        QueryParamExp.eq("snType",product.getSnType())));
-        if(!checkDuplicatedResult.isEmpty()){
-            return ApiDTO.error(500,"该规则行已存在",checkDuplicatedResult);
+                Arrays.asList(QueryParamExp.eq("snTypeCode", product.getSnTypeCode()),
+                        QueryParamExp.eq("snType", product.getSnType())));
+        if (!checkDuplicatedResult.isEmpty()) {
+            return ApiDTO.error(500, "该规则行已存在", checkDuplicatedResult);
         }
-        if(checkSnTypeCodeResult.equals("passed")){
-        Product tmp = productService.save(product);
-        return ApiDTO.ok("保存成功",tmp);}
-        else{
-            return ApiDTO.error(500,checkSnTypeCodeResult);
+        if (checkSnTypeCodeResult.equals("passed")) {
+            Product tmp = productService.save(product);
+            return ApiDTO.ok("保存成功", tmp);
+        } else {
+            return ApiDTO.error(500, checkSnTypeCodeResult);
         }
     }
 
@@ -85,7 +85,7 @@ public class ProductController {
         Product product = productService.get(param.getId());
         product.setStatus(param.getStatus());
         Product tmp = productService.save(product);
-        return ApiDTO.ok("删除成功!",tmp);
+        return ApiDTO.ok("删除成功!", tmp);
     }
 
 
@@ -93,24 +93,24 @@ public class ProductController {
     @PostMapping("/pageQuery")
     public ApiDTO pageQuery(@RequestBody QueryParamForProduct param) {
 
-        List<Product> resultByType = productService.findAll(QueryParamExp.eq("snType",param.getType()));
+        List<Product> resultByType = productService.findAll(QueryParamExp.eq("snType", param.getType()));
 
         resultByType.sort(Comparator.comparing(Product::getAddTime).reversed());
         int resultSize = resultByType.size();
         int startIndex = (param.getIndex() - 1) * param.getLength();
-        int endIndex = startIndex +  param.getLength();
+        int endIndex = startIndex + param.getLength();
         List<Product> resultByTypeAndPage;
         try {
-            if(endIndex > resultSize){
+            if (endIndex > resultSize) {
                 endIndex = resultSize;
-                resultByTypeAndPage = resultByType.subList(startIndex,endIndex);
-            }else{
-                resultByTypeAndPage = resultByType.subList(startIndex,endIndex);
+                resultByTypeAndPage = resultByType.subList(startIndex, endIndex);
+            } else {
+                resultByTypeAndPage = resultByType.subList(startIndex, endIndex);
             }
-        }catch(IllegalArgumentException e){
+        } catch (IllegalArgumentException e) {
             return ApiDTO.error("分页索引越界!");
         }
-        ApiPageDTO result = new ApiPageDTO("搜索成功!",resultByTypeAndPage);
+        ApiPageDTO result = new ApiPageDTO("搜索成功!", resultByTypeAndPage);
         result.setTotal(resultByTypeAndPage.size());
         return result;
     }

+ 22 - 0
src/main/java/cn/fastfun/controller/dto/CellDto.java

@@ -0,0 +1,22 @@
+package cn.fastfun.controller.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author zyg
+ * @className PackDto
+ * @date 2023年02月16日 14:23
+ */
+@Data
+public class CellDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "单体型号")
+    private String cellModel;
+
+    @ApiModelProperty(value = "id")
+    private String id;
+}

+ 31 - 0
src/main/java/cn/fastfun/controller/dto/PackDto.java

@@ -0,0 +1,31 @@
+package cn.fastfun.controller.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author zyg
+ * @className PackDto
+ * @date 2023年02月16日 14:23
+ */
+@Data
+public class PackDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "单体型号")
+    private String cellModel;
+
+    @ApiModelProperty(value = "包型号")
+    private String packModel;
+
+    @ApiModelProperty(value = "电压采样点")
+    private Integer voltCellAmount;
+
+    @ApiModelProperty(value = "温度采样点")
+    private Integer tempCellAmount;
+
+    @ApiModelProperty(value = "id")
+    private String id;
+}

+ 17 - 0
src/main/java/cn/fastfun/controller/param/QueryParamForCellModel.java

@@ -0,0 +1,17 @@
+package cn.fastfun.controller.param;
+
+import com.bridge.dto.QueryParam;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author user
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class QueryParamForCellModel extends QueryParam {
+
+    @ApiModelProperty(value = "单体型号", name = "cellModel", required = true)
+    private String cellModel;
+}

+ 20 - 0
src/main/java/cn/fastfun/controller/param/QueryParamForPackModel.java

@@ -0,0 +1,20 @@
+package cn.fastfun.controller.param;
+
+import com.bridge.dto.QueryParam;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author user
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class QueryParamForPackModel extends QueryParam {
+
+    @ApiModelProperty(value = "包型号", name = "packModel", required = true)
+    private String packModel;
+
+    @ApiModelProperty(value = "单体型号", name = "cellModel", required = true)
+    private String cellModel;
+}

+ 48 - 0
src/main/java/cn/fastfun/service/CellModelService.java

@@ -0,0 +1,48 @@
+package cn.fastfun.service;
+
+import cn.fastfun.controller.dto.CellDto;
+import cn.fastfun.controller.param.QueryParamForCellModel;
+import cn.fastfun.service.entity.CellModel;
+import cn.fastfun.service.vo.CellModelVo;
+import com.bridge.dto.ApiPageDTO;
+import com.bridge.service.JpaService;
+
+/**
+ * @author user
+ */
+public interface CellModelService extends JpaService<CellModel, String> {
+    /**
+     * 分页搜索单体型号
+     * @param param 参数
+     * @return com.bridge.dto.ApiPageDTO
+     */
+    ApiPageDTO getCellModelPageInfo(QueryParamForCellModel param);
+
+    /**
+     * 单体型号详情
+     * @param id 参数
+     * @return cn.fastfun.service.vo.CellModelVo
+     */
+    CellModelVo getCellDetail(String id);
+
+    /**
+     * 删除单体型号
+     * @param id 参数
+     * @return java.lang.String
+     */
+    String delCell(String id);
+
+    /**
+     * 新增单体型号
+     * @param dto 参数
+     * @return java.lang.String
+     */
+    String addCell(CellDto dto);
+
+    /**
+     * 修改单体型号
+     * @param dto 参数
+     * @return java.lang.String
+     */
+    String modifyCell(CellDto dto);
+}

+ 78 - 0
src/main/java/cn/fastfun/service/PackModelService.java

@@ -0,0 +1,78 @@
+package cn.fastfun.service;
+
+import cn.fastfun.controller.dto.PackDto;
+import cn.fastfun.controller.param.QueryParamForPackModel;
+import cn.fastfun.service.entity.PackModel;
+import cn.fastfun.service.vo.PackModelReadyListVo;
+import cn.fastfun.service.vo.PackModelVo;
+import com.bridge.dto.ApiPageDTO;
+import com.bridge.service.JpaService;
+
+import java.util.List;
+
+/**
+ * @author user
+ */
+public interface PackModelService extends JpaService<PackModel, String> {
+
+    /**
+     * 分页搜索包型号
+     * @param param 参数
+     * @return com.bridge.dto.ApiPageDTO
+     */
+    ApiPageDTO getPackModelPageInfo(QueryParamForPackModel param);
+
+    /**
+     * 包型号详情
+     * @param id 参数
+     * @return cn.fastfun.service.vo.PackModelVo
+     */
+    PackModelVo getPackDetail(String id);
+
+    /**
+     * 删除包型号
+     * @param id 参数
+     * @return java.lang.String
+     */
+    String delPack(String id);
+
+    /**
+     * 新增包型号
+     * @param dto 参数
+     * @return java.lang.String
+     */
+    String addPack(PackDto dto);
+
+    /**
+     * 修改包型号
+     * @param dto 参数
+     * @return java.lang.String
+     */
+    String modifyPack(PackDto dto);
+
+    /**
+     * 页面加载单体型号列表
+     * @return cn.fastfun.service.vo.PackModelReadyListVo
+     */
+    PackModelReadyListVo readyForListBox();
+
+    /**
+     * 通过包型号获取单体型号列表
+     * @param packModel 参数
+     * @return
+     */
+    PackModelReadyListVo getCellModelByPack(String packModel);
+
+    /**
+     * 通过单体型号获取包型号列表
+     * @param cellModel 参数
+     * @return java.util.List<cn.fastfun.service.vo.PackModelVo>
+     */
+    List<PackModelVo> getPackModelByCell(String cellModel);
+
+    /**
+     * 包型号列表
+     * @return java.util.List<cn.fastfun.service.vo.PackModelVo>
+     */
+    List<PackModelVo> getPackModelList();
+}

+ 8 - 0
src/main/java/cn/fastfun/service/entity/AppDevice.java

@@ -141,6 +141,14 @@ public class AppDevice extends DateEntity {
     @Column(name = "self_check_voltage")
     private Integer checkStatusVoltage = 0;
 
+    @ApiModelProperty(value = "包型号", name = "packModel", required = true)
+    @Column(name = "pack_model")
+    private String packModel;
+
+    @ApiModelProperty(value = "单体型号", name = "cellModel", required = true)
+    @Column(name = "cell_model")
+    private String cellModel;
+
 
     // 关联
     @JsonIgnore

+ 29 - 0
src/main/java/cn/fastfun/service/entity/CellModel.java

@@ -0,0 +1,29 @@
+package cn.fastfun.service.entity;
+
+
+import com.bridge.entity.DateEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * @author user
+ */
+@Getter
+@Setter
+@Entity
+@Table(name="t_cell")
+public class CellModel extends DateEntity {
+
+    @ApiModelProperty(value = "单体型号", name = "cell_model", required = true)
+    @Column(name="cell_model")
+    private String cellModel;
+
+    @ApiModelProperty(value = "操作者", name = "operator", required = true)
+    @Column(name="operator")
+    private String operator;
+}

+ 43 - 0
src/main/java/cn/fastfun/service/entity/PackModel.java

@@ -0,0 +1,43 @@
+package cn.fastfun.service.entity;
+
+
+import com.bridge.entity.DateEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * @author user
+ */
+@Getter
+@Setter
+@Entity
+@Table(name="t_pack")
+public class PackModel extends DateEntity {
+
+    @ApiModelProperty(value = "单体型号", name = "cell_model", required = true)
+    @Column(name="cell_model")
+    private String cellModel;
+
+    @ApiModelProperty(value = "包型号", name = "pack_model", required = true)
+    @Column(name="pack_model")
+    private String packModel;
+
+    @ApiModelProperty(value = "电压采样点", name = "volt_cell_amount", required = true)
+    @Column(name="volt_cell_amount")
+    private Integer voltCellAmount;
+
+    @ApiModelProperty(value = "温度采样点", name = "temp_cell_amount", required = true)
+    @Column(name="temp_cell_amount")
+    private Integer tempCellAmount;
+
+    @ApiModelProperty(value = "操作者", name = "operator", required = true)
+    @Column(name="operator")
+    private String operator;
+}

+ 239 - 0
src/main/java/cn/fastfun/service/impl/CellModelServiceImpl.java

@@ -0,0 +1,239 @@
+package cn.fastfun.service.impl;
+
+import cn.fastfun.controller.dto.CellDto;
+import cn.fastfun.controller.param.QueryParamForCellModel;
+import cn.fastfun.service.CellModelService;
+import cn.fastfun.service.UtilService;
+import cn.fastfun.service.entity.CellModel;
+import cn.fastfun.service.vo.CellModelVo;
+import com.bridge.dto.ApiPageDTO;
+import com.bridge.dto.QueryParam;
+import com.bridge.dto.QueryParamExp;
+import com.bridge.service.impl.JpaServiceImp;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.persistence.Query;
+import java.math.BigInteger;
+import java.util.HashMap;
+import java.util.regex.Pattern;
+
+/**
+ * @author user
+ */
+@Slf4j
+@Service
+public class CellModelServiceImpl extends JpaServiceImp<CellModel, String> implements CellModelService {
+
+    private static final String OK = "OK";
+
+    @Resource
+    UtilService utilService;
+
+    /**
+     * 分页搜索单体型号
+     *
+     * @param param 参数
+     * @return com.bridge.dto.ApiPageDTO
+     */
+    @Override
+    public ApiPageDTO getCellModelPageInfo(QueryParamForCellModel param) {
+        QueryParam finalQuery = new QueryParam();
+        if (StringUtils.isNotBlank(param.getCellModel())) {
+            finalQuery.addParam(QueryParamExp.eq("cell_model", param.getCellModel()));
+        }
+        Page<CellModel> page = this.findByParam(finalQuery);
+        ApiPageDTO result = new ApiPageDTO("搜索成功!", page);
+        return result;
+    }
+
+    /**
+     * 单体型号详情
+     *
+     * @param id 参数
+     * @return cn.fastfun.service.vo.CellModelVo
+     */
+    @Override
+    public CellModelVo getCellDetail(String id) {
+        CellModelVo vo = new CellModelVo();
+        CellModel cellModel = this.getOne(QueryParamExp.eq("id", id));
+        BeanUtils.copyProperties(cellModel, vo);
+        return vo;
+    }
+
+    /**
+     * 删除单体型号
+     *
+     * @param id 参数
+     * @return java.lang.String
+     */
+    @Override
+    public String delCell(String id) {
+        CellModel cellModel = this.get(id);
+        //校验包型号是否被使用
+        String res = checkCellModelUsed(cellModel.getCellModel());
+        if (!res.equals(OK)) {
+            return res;
+        }
+        this.delete(id);
+        return OK;
+    }
+
+    /**
+     * 新增单体型号
+     *
+     * @param dto 参数
+     * @return java.lang.String
+     */
+    @Override
+    public String addCell(CellDto dto) {
+        //校验包型号是否被使用
+        String res = checkCellModelUsed(dto.getCellModel());
+        if (!res.equals(OK)) {
+            return res;
+        }
+        //校验包型号是否被使用
+        res = checkModelRule(dto.getCellModel());
+        if (!res.equals(OK)) {
+            return res;
+        }
+        //校验单体型号是否已经存在
+        res = checkCellModelExist(dto);
+        if (!res.equals(OK)) {
+            return res;
+        }
+        CellModel cellModel = new CellModel();
+        BeanUtils.copyProperties(dto, cellModel);
+        cellModel.setOperator(utilService.getUserName());
+        this.save(cellModel);
+        return OK;
+    }
+
+    /**
+     * 修改单体型号
+     *
+     * @param dto 参数
+     * @return java.lang.String
+     */
+    @Override
+    public String modifyCell(CellDto dto) {
+        CellModel cellModel = this.get(dto.getId());
+        //校验包型号规则
+        String res = checkModelRule(dto.getCellModel());
+        if (!res.equals(OK)) {
+            return res;
+        }
+        //校验包型号是否被使用
+        res = checkCellModelUsed(dto.getCellModel());
+        if (!res.equals(OK)) {
+            return res;
+        }
+        //校验包型号是否已经存在
+        res = checkCellModelExist(dto);
+        if (!res.equals(OK)) {
+            return res;
+        }
+        BeanUtils.copyProperties(dto, cellModel);
+        cellModel.setOperator(utilService.getUserName());
+        this.save(cellModel);
+        return OK;
+    }
+
+    /**
+     * 校验包型号是否被使用
+     *
+     * @param model 参数
+     * @return java.lang.String
+     */
+    private String checkCellModelUsed(String model) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("select count(0) from app_device where cell_model='").append(model).append("' ");
+        log.info("SQL: {}", builder.toString());
+        Query q = this.getQueryBySQL(builder.toString(), new HashMap<>());
+        long amount = ((BigInteger) q.getSingleResult()).longValue();
+        if (amount > 0) {
+            return "单体型号".concat(model).concat("正在被使用");
+        }
+
+        StringBuilder builder1 = new StringBuilder();
+        builder1.append("select count(0) from t_pack where cell_model='").append(model).append("' ");
+        log.info("SQL: {}", builder1.toString());
+        Query q1 = this.getQueryBySQL(builder1.toString(), new HashMap<>());
+        amount = ((BigInteger) q1.getSingleResult()).longValue();
+        if (amount > 0) {
+            return "单体型号".concat(model).concat("正在被使用");
+        }
+        return OK;
+    }
+
+    /**
+     * 校验单体型号是否已经存在
+     *
+     * @param dto 参数
+     * @return java.lang.String
+     */
+    private String checkCellModelExist(CellDto dto) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("select count(0) from t_cell where cell_model='").append(dto.getCellModel()).append("' ");
+        if (StringUtils.isNotBlank(dto.getId())) {
+            builder.append(" and id <> '").append(dto.getId()).append("'");
+        }
+        log.info("SQL: {}", builder.toString());
+        Query q = this.getQueryBySQL(builder.toString(), new HashMap<>());
+        long amount = ((BigInteger) q.getSingleResult()).longValue();
+        if (amount > 0) {
+            return "单体型号".concat(dto.getCellModel()).concat("已存在");
+        }
+        return OK;
+    }
+
+    /**
+     * 校验包型号是否符合规则
+     * @param model 参数
+     * @return java.lang.String
+     */
+    private String checkModelRule(String model){
+        if (model.length()!=7){
+            return "包型号长度必须是7";
+        }
+        StringBuilder builder = new StringBuilder();
+        builder.append("select count(0) from product_type")
+                .append(" where status=1 and sn_type_en=2 and sn_type_code='")
+                .append(model.substring(0, 2)).append("'");
+        Query q = this.getQueryBySQL(builder.toString(), new HashMap<>());
+        long amount = ((BigInteger) q.getSingleResult()).longValue();
+        if (amount <= 0) {
+            return "单体型号-电芯厂家编码错误";
+        }
+        StringBuilder builder1 = new StringBuilder();
+        builder1.append("select count(0) from product_type")
+                .append(" where status=1 and sn_type_en=4 and sn_type_code='")
+                .append(model.substring(2, 3)).append("'");
+        q = this.getQueryBySQL(builder1.toString(), new HashMap<>());
+        amount = ((BigInteger) q.getSingleResult()).longValue();
+        if (amount <= 0) {
+            return "单体型号-电芯类型编码错误";
+        }
+        StringBuilder builder2 = new StringBuilder();
+        builder2.append("select count(0) from product_type")
+                .append(" where status=1 and sn_type_en=6 and sn_type_code= CONVERT('")
+                .append(model.substring(3, 6)).append("',UNSIGNED)");
+        q = this.getQueryBySQL(builder2.toString(), new HashMap<>());
+        amount = ((BigInteger) q.getSingleResult()).longValue();
+        if (amount <= 0) {
+            return "单体型号-电芯容量编码错误";
+        }
+        if(!(Pattern.matches("[A-Z]{1}",model.substring(6)))) {
+            return "单体型号编号不符合规则,最后一位,必须为A-Z字母";
+        }
+        if(!(Pattern.matches("[^IO]{1}",model.substring(6)))) {
+            return "单体型号编号不符合规则,最后一位不能包含I或者O";
+        }
+
+        return OK;
+    }
+}

+ 354 - 0
src/main/java/cn/fastfun/service/impl/PackModelServiceImpl.java

@@ -0,0 +1,354 @@
+package cn.fastfun.service.impl;
+
+import cn.fastfun.controller.dto.PackDto;
+import cn.fastfun.controller.param.QueryParamForPackModel;
+import cn.fastfun.service.CellModelService;
+import cn.fastfun.service.PackModelService;
+import cn.fastfun.service.UtilService;
+import cn.fastfun.service.entity.CellModel;
+import cn.fastfun.service.entity.PackModel;
+import cn.fastfun.service.entity.Product;
+import cn.fastfun.service.vo.CellModelVo;
+import cn.fastfun.service.vo.PackModelReadyListVo;
+import cn.fastfun.service.vo.PackModelVo;
+import com.bridge.dto.ApiPageDTO;
+import com.bridge.dto.QueryParam;
+import com.bridge.dto.QueryParamExp;
+import com.bridge.service.impl.JpaServiceImp;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.persistence.Query;
+import java.math.BigInteger;
+import java.util.*;
+import java.util.regex.Pattern;
+
+/**
+ * @author user
+ */
+@Service
+@Slf4j
+public class PackModelServiceImpl extends JpaServiceImp<PackModel, String> implements PackModelService {
+
+    private static final String OK = "OK";
+
+    @Resource
+    CellModelService cellModelService;
+
+    @Resource
+    UtilService utilService;
+
+    /**
+     * 分页搜索包型号
+     *
+     * @param param 参数
+     * @return com.bridge.dto.ApiPageDTO
+     */
+    @Override
+    public ApiPageDTO getPackModelPageInfo(QueryParamForPackModel param) {
+        QueryParam finalQuery = new QueryParam();
+        if (StringUtils.isNotBlank(param.getCellModel())) {
+            finalQuery.addParam(QueryParamExp.eq("cell_model", param.getCellModel()));
+        }
+        if (StringUtils.isNotBlank(param.getPackModel())) {
+            finalQuery.addParam(QueryParamExp.eq("pack_model", param.getPackModel()));
+        }
+        Page<PackModel> page = this.findByParam(finalQuery);
+        ApiPageDTO result = new ApiPageDTO("搜索成功!", page);
+        return result;
+    }
+
+
+    /**
+     * 包型号详情
+     *
+     * @param id 参数
+     * @return cn.fastfun.service.vo.PackModelVo
+     */
+    @Override
+    public PackModelVo getPackDetail(String id) {
+        PackModelVo vo = new PackModelVo();
+        PackModel packModel = this.getOne(QueryParamExp.eq("id", id));
+        BeanUtils.copyProperties(packModel, vo);
+        return vo;
+    }
+
+    /**
+     * 删除包型号
+     *
+     * @param id 参数
+     * @return java.lang.String
+     */
+    @Override
+    public String delPack(String id) {
+        PackModel packModel = this.get(id);
+        //校验包型号是否被使用
+        String res = checkPackModelUsed(packModel.getPackModel());
+        if (!res.equals(OK)) {
+            return res;
+        }
+        this.delete(id);
+        return OK;
+    }
+
+    /**
+     * 新增包型号
+     *
+     * @param dto 参数
+     * @return java.lang.String
+     */
+    @Override
+    public String addPack(PackDto dto) {
+        //校验包型号规则
+        String res = checkModelRule(dto.getPackModel());
+        if (!res.equals(OK)) {
+            return res;
+        }
+        //校验包型号是否被使用
+        res = checkPackModelUsed(dto.getPackModel());
+        if (!res.equals(OK)) {
+            return res;
+        }
+        //校验包型号是否已经存在
+        res = checkPackModelExist(dto);
+        if (!res.equals(OK)) {
+            return res;
+        }
+        //校验包型号与单体型号关联关系是否已经存在
+        res = checkPackCellModelExist(dto);
+        if (!res.equals(OK)) {
+            return res;
+        }
+        PackModel packModel = new PackModel();
+        BeanUtils.copyProperties(dto, packModel);
+        packModel.setOperator(utilService.getUserName());
+        this.save(packModel);
+        return OK;
+    }
+
+    /**
+     * 修改包型号
+     *
+     * @param dto 参数
+     * @return java.lang.String
+     */
+    @Override
+    public String modifyPack(PackDto dto) {
+        PackModel packModel = this.get(dto.getId());
+        //校验包型号规则
+        String res = checkModelRule(dto.getPackModel());
+        if (!res.equals(OK)) {
+            return res;
+        }
+        //校验包型号是否被使用
+        res = checkPackModelUsed(dto.getPackModel());
+        if (!res.equals(OK)) {
+            return res;
+        }
+        //校验包型号是否已经存在
+        res = checkPackModelExist(dto);
+        if (!res.equals(OK)) {
+            return res;
+        }
+        //校验包型号与单体型号关联关系是否已经存在
+        res = checkPackCellModelExist(dto);
+        if (!res.equals(OK)) {
+            return res;
+        }
+        BeanUtils.copyProperties(dto, packModel);
+        packModel.setOperator(utilService.getUserName());
+        this.save(packModel);
+        return OK;
+    }
+
+    /**
+     * 校验包型号是否被使用
+     *
+     * @param model 参数
+     * @return java.lang.String
+     */
+    private String checkPackModelUsed(String model) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("select count(0) from app_device where pack_model='").append(model).append("' ");
+        log.info("SQL: {}", builder.toString());
+        Query q = this.getQueryBySQL(builder.toString(), new HashMap<>());
+        long amount = ((BigInteger) q.getSingleResult()).longValue();
+        if (amount > 0) {
+            return "包型号".concat(model).concat("正在被使用");
+        }
+        return OK;
+    }
+
+    /**
+     * 校验包型号是否已经存在
+     *
+     * @param dto 参数
+     * @return java.lang.String
+     */
+    private String checkPackModelExist(PackDto dto) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("select count(0) from t_pack where pack_model='").append(dto.getPackModel()).append("' ");
+        if (StringUtils.isNotBlank(dto.getId())) {
+            builder.append(" and id <> '").append(dto.getId()).append("'");
+        }
+        log.info("SQL: {}", builder.toString());
+        Query q = this.getQueryBySQL(builder.toString(), new HashMap<>());
+        long amount = ((BigInteger) q.getSingleResult()).longValue();
+        if (amount > 0) {
+            return "包型号".concat(dto.getPackModel()).concat("已存在");
+        }
+        return OK;
+    }
+
+    /**
+     * 校验包型号与单体型号关联关系是否已经存在
+     *
+     * @param dto 参数
+     * @return java.lang.String
+     */
+    private String checkPackCellModelExist(PackDto dto) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("select count(0) from t_pack where cell_model = '").append(dto.getCellModel())
+                .append("' and pack_model='").append(dto.getPackModel()).append("' ");
+        if (StringUtils.isNotBlank(dto.getId())) {
+            builder.append(" and id <> '").append(dto.getId()).append("'");
+        }
+        log.info("SQL: {}", builder.toString());
+        Query q = this.getQueryBySQL(builder.toString(), new HashMap<>());
+        long amount = ((BigInteger) q.getSingleResult()).longValue();
+        if (amount > 0) {
+            return "包型号".concat(dto.getPackModel()).concat(" + 单体型号").concat(dto.getCellModel()).concat("组合已存在");
+        }
+        return OK;
+    }
+
+    /**
+     * 校验包型号是否符合规则
+     * @param model 参数
+     * @return java.lang.String
+     */
+    private String checkModelRule(String model){
+        if (model.length()!=7){
+            return "包型号长度必须是7";
+        }
+        StringBuilder builder = new StringBuilder();
+        builder.append("select count(0) from product_type")
+                .append(" where status=1 and sn_type_en=2 and sn_type_code='")
+                .append(model.substring(0, 2)).append("'");
+        Query q = this.getQueryBySQL(builder.toString(), new HashMap<>());
+        long amount = ((BigInteger) q.getSingleResult()).longValue();
+        if (amount <= 0) {
+            return "包型号-电芯厂家编码错误";
+        }
+        if(!(Pattern.matches("[0-9]{3}",model.substring(2,5)))) {
+            return "包型号编号不符合规则,串联数,必须为0-9数字";
+        }
+        if(!(Pattern.matches("[1-9,A-Z]{1}",model.substring(5,6)))) {
+            return "包型号编号不符合规则,并联数,必须为1-9或A-Z字母";
+        }
+        if(!(Pattern.matches("[^IO]{1}",model.substring(5,6)))) {
+            return "包型号编号不符合规则,并联数,不能包含I或者O";
+        }
+        if(!(Pattern.matches("[0-9,A-Z]{1}",model.substring(6)))) {
+            return "包型号编号不符合规则,最后一位必须为0-9,A-Z字母";
+        }
+        if(!(Pattern.matches("[^IO]{1}",model.substring(6)))) {
+            return "包型号编号不符合规则,最后一位不能包含I或者O";
+        }
+
+        return OK;
+    }
+
+    /**
+     * 页面加载单体型号列表
+     *
+     * @return cn.fastfun.service.vo.PackModelReadyListVo
+     */
+    @Override
+    public PackModelReadyListVo readyForListBox() {
+        PackModelReadyListVo vo = new PackModelReadyListVo();
+        List<CellModel> cellModelList = cellModelService.findAll(QueryParamExp.notNull("cellModel"));
+        if (cellModelList.size()>0){
+            List<CellModelVo> voList = new ArrayList<>();
+            cellModelList.forEach(o->{
+                CellModelVo v = new CellModelVo();
+                BeanUtils.copyProperties(o,v);
+                voList.add(v);
+            });
+            vo.setCellModelList(voList);
+        }
+        return vo;
+    }
+
+    /**
+     * 通过包型号获取单体型号列表
+     *
+     * @param packModel 参数
+     * @return
+     */
+    @Override
+    public PackModelReadyListVo getCellModelByPack(String packModel) {
+        PackModelReadyListVo vo = new PackModelReadyListVo();
+        List<PackModel> packModelList = this.findAll(
+                Arrays.asList(QueryParamExp.eq("packModel", packModel),
+                        QueryParamExp.notNull("cellModel")));
+        if (packModelList.size()>0){
+            List<CellModelVo> voList = new ArrayList<>();
+            packModelList.forEach(o->{
+                CellModelVo v = new CellModelVo();
+                v.setId(o.getId());
+                v.setCellModel(o.getCellModel());
+                voList.add(v);
+            });
+            vo.setCellModelList(voList);
+        }
+        return vo;
+    }
+
+    /**
+     * 通过单体型号获取包型号列表
+     *
+     * @param cellModel 参数
+     * @return java.util.List<cn.fastfun.service.vo.PackModelVo>
+     */
+    @Override
+    public List<PackModelVo> getPackModelByCell(String cellModel) {
+        List<PackModelVo> voList = new ArrayList<>();
+        List<PackModel> packModelList = this.findAll(
+                Arrays.asList(QueryParamExp.eq("cellModel", cellModel),
+                        QueryParamExp.notNull("packModel")));
+        if (packModelList.size()>0){
+            packModelList.forEach(o->{
+                PackModelVo v = new PackModelVo();
+                v.setId(o.getId());
+                v.setPackModel(o.getPackModel());
+                voList.add(v);
+            });
+        }
+        return voList;
+    }
+
+    /**
+     * 包型号列表
+     *
+     * @return java.util.List<cn.fastfun.service.vo.PackModelVo>
+     */
+    @Override
+    public List<PackModelVo> getPackModelList() {
+        List<PackModelVo> voList = new ArrayList<>();
+        List<PackModel> packModelList = this.findAll(QueryParamExp.notNull("packModel"));
+        if (packModelList.size()>0){
+            packModelList.forEach(o->{
+                PackModelVo v = new PackModelVo();
+                v.setId(o.getId());
+                v.setPackModel(o.getPackModel());
+                voList.add(v);
+            });
+        }
+        return voList;
+    }
+}

+ 9 - 0
src/main/java/cn/fastfun/service/repository/CellModelDao.java

@@ -0,0 +1,9 @@
+package cn.fastfun.service.repository;
+
+import cn.fastfun.service.entity.CellModel;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface CellModelDao extends JpaRepository<CellModel,String>, JpaSpecificationExecutor<CellModel> {
+
+}

+ 9 - 0
src/main/java/cn/fastfun/service/repository/PackModelDao.java

@@ -0,0 +1,9 @@
+package cn.fastfun.service.repository;
+
+import cn.fastfun.service.entity.PackModel;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface PackModelDao extends JpaRepository<PackModel,String>, JpaSpecificationExecutor<PackModel> {
+
+}

+ 35 - 0
src/main/java/cn/fastfun/service/vo/CellModelVo.java

@@ -0,0 +1,35 @@
+package cn.fastfun.service.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author zyg
+ * @className CellModelVo
+ * @date 2023年02月16日 13:54
+ */
+@Data
+public class CellModelVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "单体型号")
+    private String cellModel;
+
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date addTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "操作者")
+    private String operator;
+}

+ 20 - 0
src/main/java/cn/fastfun/service/vo/PackModelReadyListVo.java

@@ -0,0 +1,20 @@
+package cn.fastfun.service.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author zyg
+ * @className PackModelReadyListVo
+ * @date 2023年02月16日 13:54
+ */
+@Data
+public class PackModelReadyListVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "单体型号列表")
+    private List<CellModelVo> cellModelList;
+}

+ 44 - 0
src/main/java/cn/fastfun/service/vo/PackModelVo.java

@@ -0,0 +1,44 @@
+package cn.fastfun.service.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author zyg
+ * @className PackModelVo
+ * @date 2023年02月16日 13:54
+ */
+@Data
+public class PackModelVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "单体型号")
+    private String cellModel;
+
+    @ApiModelProperty(value = "包型号")
+    private String packModel;
+
+    @ApiModelProperty(value = "电压采样点")
+    private Integer voltCellAmount;
+
+    @ApiModelProperty(value = "温度采样点")
+    private Integer tempCellAmount;
+
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date addTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "操作者")
+    private String operator;
+}