|
@@ -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;
|
|
|
|
+ }
|
|
|
|
+}
|