package com.glxp.api.service.basic; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; import com.glxp.api.dao.basic.BasicProductsDao; import com.glxp.api.dao.basic.UdiRelevanceDao; import com.glxp.api.entity.basic.BasicProductsEntity; import com.glxp.api.entity.basic.UdiProductEntity; import com.glxp.api.entity.basic.UdiRelevanceEntity; import com.glxp.api.entity.inout.IoCodeTempEntity; import com.glxp.api.entity.thrsys.ThrSystemEntity; import com.glxp.api.req.basic.CompanyProductRelevanceRequest; import com.glxp.api.req.basic.FilterUdiRelRequest; import com.glxp.api.res.basic.MainIdRelIdAndProductResponse; import com.glxp.api.res.basic.UdiRelevanceResponse; import com.glxp.api.res.basic.UdiRlSupResponse; import com.glxp.api.service.thrsys.ThrSystemService; import com.glxp.api.util.IntUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; @Service @Transactional(rollbackFor = Exception.class) public class UdiRelevanceService extends ServiceImpl { @Resource UdiRelevanceDao udiRelevanceDao; @Resource UdiRlSupService udiRlSupService; @Resource ThrSystemService basicThirdSysService; public List filterUdiRelevance(FilterUdiRelRequest filterUdiRelRequest) { if (filterUdiRelRequest == null) { return Collections.emptyList(); } if (filterUdiRelRequest.getPage() != null) { int offset = (filterUdiRelRequest.getPage() - 1) * filterUdiRelRequest.getLimit(); PageHelper.offsetPage(offset, filterUdiRelRequest.getLimit()); } List data = udiRelevanceDao.filterUdiRelevance(filterUdiRelRequest); return data; } public List filterCertUdi(FilterUdiRelRequest filterUdiRelRequest) { if (filterUdiRelRequest == null) { return Collections.emptyList(); } if (filterUdiRelRequest.getPage() != null) { int offset = (filterUdiRelRequest.getPage() - 1) * filterUdiRelRequest.getLimit(); PageHelper.offsetPage(offset, filterUdiRelRequest.getLimit()); } List data = udiRelevanceDao.filterCertUdi(filterUdiRelRequest); return data; } public List filterUdiJoinSup(FilterUdiRelRequest filterUdiRelRequest) { if (filterUdiRelRequest == null) { return Collections.emptyList(); } if (filterUdiRelRequest.getPage() != null) { int offset = (filterUdiRelRequest.getPage() - 1) * filterUdiRelRequest.getLimit(); PageHelper.offsetPage(offset, filterUdiRelRequest.getLimit()); } List data = udiRelevanceDao.filterUdiJoinSup(filterUdiRelRequest); return data; } public List selectAllByNameCode(String nameCode) { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setUniqueNameCode(nameCode); List udiRelevanceResponses = filterUdiRelevance(filterUdiRelRequest); return udiRelevanceResponses; } public UdiRelevanceResponse selectByNameCode(String nameCode) { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setUniqueNameCode(nameCode); List udiRelevanceResponses = filterUdiRelevance(filterUdiRelRequest); if (udiRelevanceResponses != null && udiRelevanceResponses.size() > 0) return udiRelevanceResponses.get(0); return null; } public UdiRelevanceResponse selectByRelId(String relId) { if (StrUtil.isEmpty(relId)) return null; FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setId(Long.parseLong(relId)); UdiRelevanceResponse udiRelevanceResponses = selectOneUdi(filterUdiRelRequest); return udiRelevanceResponses; } public UdiRelevanceResponse selectByLevelRelId(String relId) { if (StrUtil.isEmpty(relId)) return null; FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setId(Long.parseLong(relId)); filterUdiRelRequest.setPackLevel("1"); UdiRelevanceResponse udiRelevanceResponses = selectOneUdi(filterUdiRelRequest); return udiRelevanceResponses; } public List selectAllByNameCode(String nameCode, String unitFk) { List udiRelevanceResponses; if (StrUtil.isNotEmpty(unitFk)) { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setUniqueNameCode(nameCode); filterUdiRelRequest.setUnitFk(unitFk); filterUdiRelRequest.setIsDisable(false); filterUdiRelRequest.setKey("key"); udiRelevanceResponses = filterUdiJoinSup(filterUdiRelRequest); } else { udiRelevanceResponses = selectGroupByNameCode(nameCode, false); } return udiRelevanceResponses; } /** * */ public List selectDrugsByNameCode(IoCodeTempEntity codeEnttity, String unitFk) { List udiRelevanceResponses; if (StrUtil.isNotEmpty(unitFk)) { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setUniqueNameCode(codeEnttity.getNameCode()); filterUdiRelRequest.setUnitFk(unitFk); filterUdiRelRequest.setIsDisable(false); filterUdiRelRequest.setKey("key"); if (codeEnttity.getProductType() != null) { filterUdiRelRequest.setProductsType(codeEnttity.getProductType()); } udiRelevanceResponses = filterUdiJoinSup(filterUdiRelRequest); } else { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setNameCode(codeEnttity.getNameCode()); filterUdiRelRequest.setIsDisable(false); filterUdiRelRequest.setProductsType(codeEnttity.getProductType()); return udiRelevanceDao.filterUdiGp(filterUdiRelRequest); } return udiRelevanceResponses; } /** * 根据收费项目查询产品信息 * * @return */ public UdiRelevanceResponse selectByPayFeeCode(String payFeeCode) { if (StrUtil.isEmpty(payFeeCode)) { return null; } List udiRelevanceResponses; FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setPayFeeCode(payFeeCode); udiRelevanceResponses = filterUdiJoinSup(filterUdiRelRequest); if (CollUtil.isNotEmpty(udiRelevanceResponses)) { return udiRelevanceResponses.get(0); } return null; } public boolean isExit() { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setPage(1); filterUdiRelRequest.setLimit(1); List data = filterUdiRelevance(filterUdiRelRequest); if (data != null && data.size() > 0) { return true; } return false; } public List filterUdiGp(FilterUdiRelRequest filterUdiRelRequest) { if (filterUdiRelRequest == null) { return Collections.emptyList(); } if (filterUdiRelRequest.getPage() != null) { int offset = (filterUdiRelRequest.getPage() - 1) * filterUdiRelRequest.getLimit(); PageHelper.offsetPage(offset, filterUdiRelRequest.getLimit()); } List data = udiRelevanceDao.filterUdiGp(filterUdiRelRequest); return data; } public List batchSelectByUuid(List uuids) { return udiRelevanceDao.batchSelectByUuid(uuids); } public List batchSelectByIds(List ids) { return udiRelevanceDao.batchSelectByIds(ids); } public List selectByUuid(String uuid) { return udiRelevanceDao.selectByUuid(uuid); } public UdiRelevanceEntity selectById(Long id) { return udiRelevanceDao.selectById(id); } public UdiRelevanceResponse selectGroupById(Long id) { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setId(id); filterUdiRelRequest.setDiType(1); List data = udiRelevanceDao.filterUdiRelevance(filterUdiRelRequest); if (data != null && data.size() > 0) return data.get(0); return null; } public UdiRelevanceResponse selectUdiId(Long id) { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setId(id); List data = udiRelevanceDao.filterUdiRelevance(filterUdiRelRequest); if (data != null && data.size() > 0) return data.get(0); return null; } public UdiRelevanceResponse selectSupGroupById(Long id, String supId) { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); if (StrUtil.isNotEmpty(supId)) filterUdiRelRequest.setUnitFk(supId); filterUdiRelRequest.setId(id); filterUdiRelRequest.setDiType(1); return udiRelevanceDao.selectOneUdiJoinSup(filterUdiRelRequest); } public UdiRelevanceEntity selectUpdateByUuid(String uuid) { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setUuid(uuid); List data = udiRelevanceDao.filterEntity(filterUdiRelRequest); if (data != null && data.size() > 0) return data.get(0); return null; } public UdiRelevanceEntity selectUpdateByThirdId(String thirdId) { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); if (thirdId != null) { ThrSystemEntity basicThirdSysEntity = basicThirdSysService.selectMainThrSys(); String mainSys = basicThirdSysEntity.getThirdId(); if (mainSys.equals("thirdId")) { filterUdiRelRequest.setThirdId(thirdId); } else if (mainSys.equals("thirdId1")) { filterUdiRelRequest.setThirdId1(thirdId); } else if (mainSys.equals("thirdId2")) { filterUdiRelRequest.setThirdId2(thirdId); } else if (mainSys.equals("thirdId3")) { filterUdiRelRequest.setThirdId3(thirdId); } else if (mainSys.equals("thirdId4")) { filterUdiRelRequest.setThirdId4(thirdId); } } List data = udiRelevanceDao.filterEntity(filterUdiRelRequest); if (data != null && data.size() > 0) return data.get(0); return null; } public List selectByMainId(String mainId) { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setMainId(mainId); List udiRelevanceResponses = filterUdiRelevance(filterUdiRelRequest); return udiRelevanceResponses; } public UdiRelevanceEntity selectUpteaByAll(String uuid, String thirdId) { FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); if (thirdId != null) { ThrSystemEntity basicThirdSysEntity = basicThirdSysService.selectMainThrSys(); String mainSys = basicThirdSysEntity.getThirdId(); filterUdiRelRequest.setUuid(uuid); if (mainSys.equals("thirdId")) { filterUdiRelRequest.setThirdId(thirdId); } else if (mainSys.equals("thirdId1")) { filterUdiRelRequest.setThirdId1(thirdId); } else if (mainSys.equals("thirdId2")) { filterUdiRelRequest.setThirdId2(thirdId); } else if (mainSys.equals("thirdId3")) { filterUdiRelRequest.setThirdId3(thirdId); } else if (mainSys.equals("thirdId4")) { filterUdiRelRequest.setThirdId4(thirdId); } } List data = udiRelevanceDao.filterEntity(filterUdiRelRequest); if (data != null && data.size() > 0) return data.get(0); return null; } public UdiRelevanceEntity selectByThirdId(String thirdId, String thirdSys) { if (StrUtil.isEmpty(thirdId) || StrUtil.isEmpty(thirdSys)) { return null; } FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); if ("thirdId".equals(thirdSys)) { filterUdiRelRequest.setThirdId(thirdId); } else if ("thirdId1".equals(thirdSys)) { filterUdiRelRequest.setThirdId1(thirdId); } else if ("thirdId2".equals(thirdSys)) { filterUdiRelRequest.setThirdId2(thirdId); } else if ("thirdId3".equals(thirdSys)) { filterUdiRelRequest.setThirdId3(thirdId); } else if ("thirdId4".equals(thirdSys)) { filterUdiRelRequest.setThirdId4(thirdId); } return udiRelevanceDao.selectByThirdId(filterUdiRelRequest); } public List selectListByThirdId(String thirdId, String thirdSys) { if (StrUtil.isEmpty(thirdId) || StrUtil.isEmpty(thirdSys)) { return null; } CompanyProductRelevanceRequest filterUdiRelRequest = new CompanyProductRelevanceRequest(); if ("thirdId".equals(thirdSys)) { filterUdiRelRequest.setThirdId(thirdId); } else if ("thirdId1".equals(thirdSys)) { filterUdiRelRequest.setThirdId1(thirdId); } else if ("thirdId2".equals(thirdSys)) { filterUdiRelRequest.setThirdId2(thirdId); } else if ("thirdId3".equals(thirdSys)) { filterUdiRelRequest.setThirdId3(thirdId); } else if ("thirdId4".equals(thirdSys)) { filterUdiRelRequest.setThirdId4(thirdId); } filterUdiRelRequest.setDiType(1); List data = udiRlSupService.filterUdiGp(filterUdiRelRequest); return data; } public UdiProductEntity getDiProduct(List udiInfoEntities) { return udiInfoEntities.stream() .filter(udiProductEntity -> IntUtil.value(udiProductEntity.getDiType()) == 1) .findFirst() .orElse(null); } public UdiRelevanceEntity insertDefaultLevel(UdiRelevanceEntity udiRelevanceEntity, UdiProductEntity udiProductEntity) { if (udiProductEntity != null) { udiRelevanceEntity.setDistributeLevel(1); udiRelevanceEntity.setUseLevel(0); } return udiRelevanceEntity; } public boolean insertUdiRelevance(UdiRelevanceEntity udiRelevanceEntity) { return udiRelevanceDao.insertUdiRelevance(udiRelevanceEntity); } public UdiRelevanceResponse selectByMainIdOne(String mainId) { List udiRelevanceResponses = selectByMainId(mainId); if (udiRelevanceResponses != null && udiRelevanceResponses.size() > 0) return udiRelevanceResponses.get(0); return null; } public boolean updateUdiRelevance(UdiRelevanceEntity udiRelevanceEntity) { ThrSystemEntity basicThirdSysEntity = basicThirdSysService.selectMainThrSys(); String mainSys = basicThirdSysEntity.getThirdId(); if (mainSys.equals("thirdId")) { udiRelevanceEntity.setMainId(udiRelevanceEntity.getThirdId()); } else if (mainSys.equals("thirdId1")) { udiRelevanceEntity.setMainId(udiRelevanceEntity.getThirdId1()); } else if (mainSys.equals("thirdId2")) { udiRelevanceEntity.setMainId(udiRelevanceEntity.getThirdId2()); } else if (mainSys.equals("thirdId3")) { udiRelevanceEntity.setMainId(udiRelevanceEntity.getThirdId3()); } else if (mainSys.equals("thirdId4")) { udiRelevanceEntity.setMainId(udiRelevanceEntity.getThirdId4()); } return udiRelevanceDao.updateUdiRelevance(udiRelevanceEntity); } public boolean deleteById(String id) { return udiRelevanceDao.deleteById(id); } public boolean deleteByIds(List ids) { return udiRelevanceDao.deleteByIds(ids); } public List selectGroupByNameCode(String nameCode, Boolean isDisable) { // FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); // filterUdiRelRequest.setNameCode(nameCode); // filterUdiRelRequest.setIsDisable(isDisable); return udiRelevanceDao.selectGroupByNameCode(nameCode, isDisable); } public UdiRelevanceResponse selectOneUdi(FilterUdiRelRequest filterUdiRelRequest) { return udiRelevanceDao.selectOneUdi(filterUdiRelRequest); } public MainIdRelIdAndProductResponse selectMainIdRelIdAndProductMap(List thrCodes, String thirdSys) { MainIdRelIdAndProductResponse mainIdRelIdAndProductResponse = new MainIdRelIdAndProductResponse(); Map mainIdRelIdMap = new HashMap<>(); Map relIdBasicProductsEntityMap = new HashMap<>(); QueryWrapper qw = new QueryWrapper<>(); qw.in(thirdSys, thrCodes); qw.ne("isDisable", true); qw.select("id", "mainId"); List udiRelevanceEntityList = udiRelevanceDao.selectList(qw); if (CollectionUtil.isNotEmpty(udiRelevanceEntityList)) { mainIdRelIdMap = udiRelevanceEntityList.stream().collect(Collectors.toMap(UdiRelevanceEntity::getMainId, udiRelevanceEntity -> udiRelevanceEntity)); } mainIdRelIdAndProductResponse.setMainIdRelIdMap(mainIdRelIdMap); mainIdRelIdAndProductResponse.setRelIdBasicProductsEntityMap(relIdBasicProductsEntityMap); return mainIdRelIdAndProductResponse; } public Integer findPurType(Long relId) { UdiRelevanceEntity udiRelevanceEntity = udiRelevanceDao.selectOne(new QueryWrapper().select("purType").eq("id", relId).last("limit 1")); if (udiRelevanceEntity == null) return 0; return IntUtil.value(udiRelevanceEntity.getPurType()); } @Resource private BasicProductsDao basicProductsDao; public List selectByCheckCode(String checkCode) { LambdaQueryWrapper exactMatchWrapper = new LambdaQueryWrapper<>(); exactMatchWrapper.eq(BasicProductsEntity::getYbbm, checkCode); List exactMatches = basicProductsDao.selectList(exactMatchWrapper); if (exactMatches.isEmpty()) { // 2. 如果没有完全匹配,则查询前20位匹配的情况 LambdaQueryWrapper prefixMatchWrapper = new LambdaQueryWrapper<>(); prefixMatchWrapper.apply("LEFT(ybbm, 20) = LEFT({0}, 20)", checkCode); exactMatches = basicProductsDao.selectList(prefixMatchWrapper); } if (CollUtil.isNotEmpty(exactMatches)) { List relIds = udiRelevanceDao.selectList(new LambdaQueryWrapper() .in(UdiRelevanceEntity::getUuid, exactMatches.stream().map(BasicProductsEntity::getUuid).collect(Collectors.toList())) ).stream().map(UdiRelevanceEntity::getId).collect(Collectors.toList()); return relIds; } else { return new ArrayList<>(); } } /** * 批量查询追溯码信息 * * @param nameCodes 追溯码列表 * @return 追溯码信息映射 */ public Map batchSelectByNameCodes(List nameCodes) { if (CollUtil.isEmpty(nameCodes)) { return new HashMap<>(); } Map resultMap = new HashMap<>(); // 对大批量数据进行分批处理,每次处理500个 int batchSize = 500; for (int i = 0; i < nameCodes.size(); i += batchSize) { int endIndex = Math.min(i + batchSize, nameCodes.size()); List batchCodes = nameCodes.subList(i, endIndex); // 使用IN查询一次性获取多个码的信息 FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); filterUdiRelRequest.setNameCodes(batchCodes); List batchResponses = udiRelevanceDao.batchSelectByNameCodes(filterUdiRelRequest); if (CollUtil.isNotEmpty(batchResponses)) { for (UdiRelevanceResponse response : batchResponses) { if (response != null && StrUtil.isNotEmpty(response.getNameCode())) { resultMap.put(response.getNameCode(), response); } } } } return resultMap; } }