¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.service.impl; |
| | | |
| | | import cn.hutool.core.util.NumberUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.core.toolkit.*; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.basic.dto.ProductDto; |
| | | import com.ruoyi.basic.mapper.StandardProductListMapper; |
| | | import com.ruoyi.basic.mapper.StandardTreeMapper; |
| | | import com.ruoyi.basic.pojo.InsSample1; |
| | | import com.ruoyi.basic.pojo.StandardProductList; |
| | | import com.ruoyi.basic.pojo.StandardTree; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.basic.service.StandardProductListService; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import lombok.AllArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author Administrator |
| | | * @description é对表ãstandard_product_list(æ åæ ä¸çæ£éªé¡¹ç®)ãçæ°æ®åºæä½Serviceå®ç° |
| | | * @createDate 2024-03-05 10:33:29 |
| | | */ |
| | | @Service |
| | | @AllArgsConstructor |
| | | public class StandardProductListServiceImpl extends ServiceImpl<StandardProductListMapper, StandardProductList> |
| | | implements StandardProductListService { |
| | | |
| | | private StandardProductListMapper standardProductListMapper; |
| | | |
| | | private StandardTreeMapper standardTreeMapper; |
| | | |
| | | |
| | | @Override |
| | | public int upStandardProductList(StandardProductList list) { |
| | | return standardProductListMapper.updateById(list); |
| | | } |
| | | |
| | | @Override |
| | | public int delStandardProduct(JSONArray list) { |
| | | return standardProductListMapper.deleteBatchIds(list); |
| | | } |
| | | |
| | | @Override |
| | | public List<StandardProductList> selectStandardProductList(InsSample1 insSample) { |
| | | String[] models = insSample.getModel().split("-(?=[^-]*$)");//æåæåä¸ä¸ªã-ã |
| | | String[] splits = StringUtils.isNotEmpty(insSample.getFactory())?insSample.getFactory().split(" - "):new String[0]; |
| | | List<StandardProductList> list = new ArrayList<>(); |
| | | if(splits.length<4){ |
| | | list = standardProductListMapper.selectDetail(insSample.getStandardMethodListId(), 1, models[0],"",""); |
| | | }else { |
| | | list = standardProductListMapper.selectDetail(insSample.getStandardMethodListId(), 1, models[0],splits[2],splits[3]); |
| | | } |
| | | if (list.isEmpty()) { |
| | | if (Objects.equals(insSample.getFactory(), "") || insSample.getFactory() == null) { |
| | | return null; |
| | | } |
| | | String[] split = insSample.getFactory().split(" - "); |
| | | String tree = split[0] + " - " + split[1] + " - " + split[2] + " - " + split[3] + " - null"; |
| | | list = standardProductListMapper.selectDetail2(insSample.getStandardMethodListId(), 1, tree); |
| | | if (list.isEmpty()) { |
| | | String tree1 = split[0] + " - " + split[1] + " - " + split[2] + " - null - " + split[3]; |
| | | list = standardProductListMapper.selectDetail2(insSample.getStandardMethodListId(), 1, tree1); |
| | | if(list.isEmpty()) { |
| | | String tree2 = split[0] + " - " + split[1] + " - " + split[2] + " - " + split[3] + " - "; |
| | | list = standardProductListMapper.selectDetail2(insSample.getStandardMethodListId(), 1, tree2); |
| | | } |
| | | } |
| | | } |
| | | //夿é¿åº¦ |
| | | if (splits.length > 4) { |
| | | if (ObjectUtils.isNotEmpty(splits[3])) { |
| | | list = list.stream().filter(list1 -> Objects.nonNull(list1.getSample())&&Objects.equals(list1.getSample(),splits[3])).collect(Collectors.toList()); |
| | | }else if (splits[3].isEmpty()) { |
| | | list = list.stream().filter(list1 -> Objects.nonNull(list1.getSampleType())&&Objects.equals(list1.getSampleType(),splits[2])).collect(Collectors.toList()); |
| | | } |
| | | } |
| | | list = list.stream().filter(a -> { |
| | | try { |
| | | if (a.getSection() != null && !Objects.equals(a.getSection(), "")) { |
| | | List<String> sections = JSON.parseArray(a.getSection(), String.class); |
| | | List<String> asks = JSON.parseArray(a.getAsk(), String.class); |
| | | List<String> tells = JSON.parseArray(a.getTell(), String.class); |
| | | List<String> manHours = JSON.parseArray(a.getManHour(), String.class); |
| | | List<String> prices = JSON.parseArray(a.getPrice(), String.class); |
| | | boolean isIf; |
| | | for (int i = 0; i < sections.size(); i++) { |
| | | if (Objects.equals(a.getBsm(), "1")) { |
| | | return true; |
| | | } else { |
| | | if (sections.get(i).contains("&")) { |
| | | String[] split = sections.get(i).split("&"); |
| | | isIf = getIsIf(split[0], models[1]) && getIsIf(split[1], models[1]); |
| | | } else { |
| | | isIf = getIsIf(sections.get(i), models[1]); |
| | | } |
| | | if (isIf) { |
| | | a.setSection(sections.get(i)); |
| | | a.setAsk(asks.get(i)); |
| | | a.setTell(tells.get(i)); |
| | | a.setPrice(prices.get(i)); |
| | | a.setManHour(manHours.get(i)); |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | } catch (Exception ignored) { |
| | | return false; |
| | | } |
| | | return true; |
| | | }).collect(Collectors.toList()); |
| | | return list; |
| | | } |
| | | |
| | | private boolean getIsIf(String str, String model) { |
| | | Matcher matcher = Pattern.compile("\\d+(\\.\\d+)?").matcher(model); |
| | | BigDecimal modelNumber = BigDecimal.ZERO; |
| | | String model2 = ""; |
| | | while (matcher.find()) { |
| | | model2 += matcher.group(); |
| | | modelNumber = BigDecimal.valueOf(Double.parseDouble(model2)); |
| | | break; |
| | | } |
| | | Double param = matchNumber(str); |
| | | if (str.contains("â¥") || str.contains(">=")) { |
| | | // String param = str.replace("â¥", "").replace(">=", ""); |
| | | return modelNumber.compareTo(new BigDecimal(param)) > -1; |
| | | } else if (str.contains("â¤") || str.contains("<=")) { |
| | | // String param = str.replace("â¤", "").replace("<=", ""); |
| | | return modelNumber.compareTo(new BigDecimal(param)) < 1; |
| | | } else if (str.contains(">") || str.contains("ï¼")) { |
| | | // String param = str.replace(">", "").replace("ï¼", ""); |
| | | return modelNumber.compareTo(new BigDecimal(param)) > 0; |
| | | } else if (str.contains("<") || str.contains("ï¼")) { |
| | | // String param = str.replace("<", "").replace("ï¼", ""); |
| | | return modelNumber.compareTo(new BigDecimal(param)) < 0; |
| | | } else if (str.contains("=")) { |
| | | // String param = str.replace("=", ""); |
| | | return modelNumber.compareTo(new BigDecimal(param)) == 0; |
| | | } |
| | | return false; |
| | | } |
| | | public Double matchNumber(String str) { |
| | | String regex = "[>ï¼â¥â¤=]?[>=<]?\\s*(-?\\d+(\\.\\d+)?)"; |
| | | // ç¼è¯æ£åè¡¨è¾¾å¼ |
| | | Matcher matcher = Pattern.compile(regex).matcher(str); |
| | | List<Double> numbers = new ArrayList<>(); |
| | | while(matcher.find()) { |
| | | if(matcher.group(1) != null) { |
| | | numbers.add(Double.parseDouble(matcher.group(1))); |
| | | } |
| | | } |
| | | if(numbers.size() > 0) { |
| | | return numbers.get(0); |
| | | } |
| | | return 0.00; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Map<String, Object> selectStandardProductListByMethodId(Integer id, String tree, Integer page) { |
| | | String[] trees = tree.split(" - "); |
| | | // try { |
| | | // String tree1 = trees[2]; |
| | | // } catch (Exception e) { |
| | | // throw new ErrorException("æä½å¤ªå¿«,ç³»ç»ä¼ åé误!!!!"); |
| | | // } |
| | | //listä¸ºæ ¹æ®æ¡ä»¶æ¥è¯¢çè½åèå´æ°æ® |
| | | List<StandardProductList> list = new ArrayList<>(); |
| | | if (trees.length == 3) { |
| | | List<StandardTree> treeList = new ArrayList<>(); |
| | | StandardTree standardTree = new StandardTree(); |
| | | standardTree.setFactory(trees[0]); |
| | | standardTree.setLaboratory(trees[1]); |
| | | standardTree.setSampleType(trees[2]); |
| | | List<ProductDto> pList = standardTreeMapper.selectPList(trees[2]); |
| | | if (pList.isEmpty() || pList.get(0) == null) { |
| | | List<StandardTree> treeList1 = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2])); |
| | | if (treeList1.isEmpty()) { |
| | | treeList.add(standardTree); |
| | | } else { |
| | | treeList.addAll(treeList1); |
| | | } |
| | | } else { |
| | | for (ProductDto p : pList) { |
| | | standardTree.setSample(p.getName()); |
| | | List<StandardTree> treeList1 = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, p.getName())); |
| | | if (treeList1.isEmpty()) { |
| | | treeList.add(JSON.parseObject(JSON.toJSONString(standardTree), StandardTree.class)); |
| | | } else { |
| | | treeList.addAll(treeList1); |
| | | } |
| | | } |
| | | } |
| | | for (StandardTree standardTree2 : treeList) { |
| | | String tree2 = trees[0] + " - " + trees[1] + " - " + trees[2] + " - " + standardTree2.getSample() + " - " + standardTree2.getModel(); |
| | | list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", standardTree2.getSample(), standardTree2.getModel(), tree2, trees[1])); |
| | | list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + standardTree2.getSample() + "\"", standardTree2.getSample(), standardTree2.getModel(), tree2, trees[1])); |
| | | } |
| | | } |
| | | else if (trees.length == 4) { |
| | | List<StandardTree> treeList = standardTreeMapper.selectList(Wrappers.<StandardTree>lambdaQuery().eq(StandardTree::getLaboratory, trees[1]).eq(StandardTree::getSampleType, trees[2]).eq(StandardTree::getSample, trees[3])); |
| | | if (treeList.isEmpty()) { |
| | | StandardTree standardTree = new StandardTree(); |
| | | standardTree.setFactory(trees[0]); |
| | | standardTree.setLaboratory(trees[1]); |
| | | standardTree.setSampleType(trees[2]); |
| | | standardTree.setSample(trees[3]); |
| | | treeList.add(standardTree); |
| | | } |
| | | for (StandardTree standardTree : treeList) { |
| | | String str = tree + " - " + standardTree.getModel(); |
| | | list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", standardTree.getSample(), standardTree.getModel(), str, trees[1])); |
| | | list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + trees[3] + "\"", standardTree.getSample(), standardTree.getModel(), str, trees[1])); |
| | | } |
| | | } |
| | | else { |
| | | list.addAll(standardTreeMapper.selectStandardProductListByTree("\"" + trees[2] + "\"", trees[3].equals("null") ? null : trees[3], trees[4], tree, trees[1])); |
| | | list.addAll(standardTreeMapper.selectStandardProductListByTree2("\"" + trees[2] + "\",\"" + trees[3] + "\"", trees[3].equals("null") ? null : trees[3], trees[4], tree, trees[1])); |
| | | } |
| | | //æ ååºå¯¹åºæ£éªé¡¹æ°æ® |
| | | List<StandardProductList> standardProductLists = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery() |
| | | .eq(StandardProductList::getStandardMethodListId, id)//æ åæ¹æ³id |
| | | .eq(StandardProductList::getSampleType,trees[2])//æ ·å大类 |
| | | .eq(trees.length>3,StandardProductList::getSample,trees.length>3?trees[3]:"")//æ ·å |
| | | .eq(trees.length>4,StandardProductList::getModel,trees.length>4?trees[4]:"")//åå· |
| | | ); |
| | | //å¤çæ°æ® |
| | | //ä¸è½ç¼è¾çæ°æ®ä»¥è½åèå´ä¸ºä¸»ï¼å¯ç¼è¾çæ°æ®ä»¥æ ååºä¸ºä¸» |
| | | for (StandardProductList sp : standardProductLists) { |
| | | for (StandardProductList pl : list) { |
| | | if(Objects.isNull(sp.getStructureItemParameterId())){ |
| | | break; |
| | | } |
| | | pl.setFactory(sp.getFactory()); |
| | | pl.setSampleType(sp.getSampleType()); |
| | | pl.setStandardMethodListId(id);//æ åæ¹æ³id |
| | | if(NumberUtil.equals(sp.getStructureItemParameterId(),pl.getStructureItemParameterId()) && (trees.length <= 4 || Objects.equals(sp.getModel(), pl.getModel()))){ |
| | | pl.setId(sp.getId()); |
| | | pl.setAsk(sp.getAsk());//è¦æ±å¼ |
| | | pl.setTell(sp.getTell());//è¦æ±æè¿° |
| | | pl.setManHour(sp.getManHour());//å·¥æ¶ç³»æ° |
| | | pl.setManHourGroup(sp.getManHourGroup());//å·¥æ¶åç» |
| | | pl.setPrice(sp.getPrice());//åä»· |
| | | pl.setTemplateId(sp.getTemplateId());//模æ¿id |
| | | pl.setSection(sp.getSection());//åºé´ |
| | | pl.setState(sp.getState());//å¾éç¶æ |
| | | pl.setMethodS(sp.getMethodS());//è¯éªæ¹æ³ |
| | | pl.setMethodS(sp.getMethodS());//æ¹æ³ |
| | | pl.setTree(sp.getTree());//æ å½¢ç»æå符 |
| | | } |
| | | } |
| | | } |
| | | //æ¥è¯¢æ ååºå¯¹åºçæ°æ®ä¸ºç©ºï¼è¯ææ¯æ°å çæ åï¼ä»¥è½åèå´ä¸ºä¸» |
| | | if(standardProductLists.isEmpty()){ |
| | | list.forEach(l->{ |
| | | l.setStandardMethodListId(id); |
| | | l.setFactory(org.apache.commons.lang3.StringUtils.isNotBlank(trees[0])?trees[0]:""); |
| | | l.setSampleType(org.apache.commons.lang3.StringUtils.isNotBlank(trees[2])?trees[2]:""); |
| | | }); |
| | | } |
| | | //æ·»å æ°å çé¡¹ç® |
| | | list.stream().filter(l->Objects.isNull(l.getId())).forEach(this::save); |
| | | Map<String, Object> map = new HashMap<>(); |
| | | list.sort((o1, o2) -> { |
| | | String field1 = o1.getManHourGroup(); |
| | | String field2 = o2.getManHourGroup(); |
| | | |
| | | boolean isEmpty1 = field1 == null || field1.isEmpty(); |
| | | boolean isEmpty2 = field2 == null || field2.isEmpty(); |
| | | |
| | | if (isEmpty1 && isEmpty2) { |
| | | return 0; |
| | | } else if (isEmpty1) { |
| | | return 1; |
| | | } else if (isEmpty2) { |
| | | return -1; |
| | | } else { |
| | | int num1 = extractNumber(field1); |
| | | int num2 = extractNumber(field2); |
| | | return Integer.compare(num1, num2); |
| | | } |
| | | }); |
| | | try { |
| | | map.put("productList", list.subList((page - 1) * 50, page * 50)); |
| | | } catch (IndexOutOfBoundsException e) { |
| | | map.put("productList", list.subList((page - 1) * 50, list.size())); |
| | | } |
| | | map.put("total", list.size()); |
| | | return map; |
| | | } |
| | | |
| | | private int extractNumber(String s) { |
| | | // ä»åç¬¦ä¸²ä¸æåæ°åçé»è¾ï¼è¿éåè®¾åæ®µçæ ¼å¼æ¯ "text<number>" |
| | | String number = s; |
| | | if (!s.matches("\\d+")) { |
| | | number = s.replaceAll("\\D", ""); |
| | | } |
| | | return Integer.parseInt(number); |
| | | } |
| | | |
| | | @Override |
| | | public IPage<StandardProductList> selectStandardProductByMethodId(Integer id, String tree, Integer page, String laboratory, String item, String items) { |
| | | IPage<StandardProductList> iPage = new Page<>(); |
| | | iPage.setSize(100); |
| | | iPage.setCurrent(page); |
| | | return standardProductListMapper.standardProductListIPage(id, tree, iPage, laboratory, item, items); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List<?>> selectStandardProductEnumByMethodId(Integer id, String tree, String item) { |
| | | HashMap<String, List<?>> map = new HashMap<>(); |
| | | map.put("item", standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery() |
| | | .eq(StandardProductList::getStandardMethodListId, id) |
| | | .like(StandardProductList::getTree, tree) |
| | | .select(StandardProductList::getInspectionItem) |
| | | .groupBy(StandardProductList::getInspectionItem))); |
| | | if (ObjectUtils.isNotEmpty(item)) { |
| | | map.put("items", standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery() |
| | | .eq(StandardProductList::getStandardMethodListId, id) |
| | | .eq(StandardProductList::getInspectionItem, item) |
| | | .like(StandardProductList::getTree, tree) |
| | | .select(StandardProductList::getInspectionItemSubclass) |
| | | .groupBy(StandardProductList::getInspectionItemSubclass))); |
| | | } else { |
| | | map.put("items", standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery() |
| | | .eq(StandardProductList::getStandardMethodListId, id) |
| | | .like(StandardProductList::getTree, tree) |
| | | .select(StandardProductList::getInspectionItemSubclass) |
| | | .groupBy(StandardProductList::getInspectionItemSubclass))); |
| | | } |
| | | return map; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |