diff --git a/src/main/java/com/syjiaer/clinic/server/entity/social/SocialDirectoryMongodb.java b/src/main/java/com/syjiaer/clinic/server/entity/social/SocialDirectoryMongodb.java new file mode 100644 index 0000000..204e627 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/social/SocialDirectoryMongodb.java @@ -0,0 +1,45 @@ +package com.syjiaer.clinic.server.entity.social; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 医保目录 + *

+ * + * @author NiuZiYuan + * @since 2025-04-17 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("social_directory") +@ApiModel(value = "SocialDirectory对象", description = "医保目录") +public class SocialDirectoryMongodb{ + + + @ApiModelProperty("医保目录编码") + private String code; + + @ApiModelProperty("名称") + private String name; + + @ApiModelProperty("检索关键词") + private String keyword; + + @ApiModelProperty("类型") + private Integer type; + + @ApiModelProperty("生产企业") + private String producer; +} diff --git a/src/main/java/com/syjiaer/clinic/server/service/social/SocialDirectoryService.java b/src/main/java/com/syjiaer/clinic/server/service/social/SocialDirectoryService.java index a467056..ed56f32 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/social/SocialDirectoryService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/social/SocialDirectoryService.java @@ -13,7 +13,15 @@ import com.syjiaer.clinic.server.entity.social.vo.SocialDirectoryView; import com.syjiaer.clinic.server.mapper.goods.GoodsMapper; import com.syjiaer.clinic.server.mapper.social.*; import com.syjiaer.clinic.server.service.BaseService; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.index.Index; +import org.springframework.data.mongodb.core.index.IndexInfo; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -47,6 +55,9 @@ public class SocialDirectoryService extends BaseService { @Autowired private SocialDirectoryVersionService socialDirectoryVersionService; + @Autowired + private MongoTemplate mongoTemplate; + @Autowired private GoodsMapper goodsMapper; @@ -157,11 +168,53 @@ public class SocialDirectoryService extends BaseService { if(list.isEmpty()){ return null; } - socialDirectoryMapper.insert(list, 100); + socialDirectoryMapper.insert(list, 100); + initMongoDb(); + saveListToMongoDb(list); return next_version_name; } + private void saveToMongoDb(SocialDirectory socialDirectory){ + SocialDirectoryMongodb socialDirectoryMongodb = new SocialDirectoryMongodb(); + BeanUtils.copyProperties(socialDirectory, socialDirectoryMongodb); + Query query = new Query(Criteria.where("code").is(socialDirectoryMongodb.getCode())); + if (mongoTemplate.exists(query, SocialDirectoryMongodb.class,"social_directory")) { + + Update update = new Update(); + update.set("name", socialDirectoryMongodb.getName()); + update.set("keyword", socialDirectoryMongodb.getKeyword()); + update.set("type", socialDirectoryMongodb.getType()); + update.set("producer", socialDirectoryMongodb.getProducer()); + mongoTemplate.updateFirst(query, update, SocialDirectoryMongodb.class,"social_directory"); + }else{ + mongoTemplate.insert(socialDirectoryMongodb, "social_directory"); + } + } + + + private void saveListToMongoDb(List list){ + for(SocialDirectory socialDirectory:list){ + saveToMongoDb(socialDirectory); + } + } + + private void initMongoDb(){ + if (!mongoTemplate.collectionExists("social_directory")) { + System.out.println("创建了social_directory集合"); + mongoTemplate.createCollection("social_directory"); + } + + List indexInfos = mongoTemplate.indexOps("social_directory").getIndexInfo(); + //判断索引是否存在 + if (indexInfos.stream().noneMatch(index -> index.getName().equals("code_uni"))) { + System.out.println("创建了code索引"); + Index index = new Index().on("code", Sort.Direction.ASC).named("code_uni").unique(); + mongoTemplate.indexOps("social_directory").ensureIndex(index); + } + } + + /* * 搜索接口 * @param keyword 关键字 @@ -175,6 +228,13 @@ public class SocialDirectoryService extends BaseService { * @param keyword 关键字 */ public Page search(String keyword, List typeList, int pageNum, int pageSize) { + + //mongodb分页 + + + + + QueryWrapper codeqw = new QueryWrapper<>(); if (typeList.size() == 1) { codeqw.eq("type", typeList.get(0)); @@ -310,10 +370,50 @@ public class SocialDirectoryService extends BaseService { */ public List fullList(List codeList) { List socialDirectoryViewList = new ArrayList<>(); - for (String code : codeList) { - SocialDirectoryView socialDirectoryView = fullInfo(code); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.in("code",codeList); + List socialDirectoryList = socialDirectoryMapper.selectList(queryWrapper); + List socialDirectoryUpinfoList = socialDirectoryUpinfoMapper.selectList(queryWrapper); + List socialDirectoryLimitList = socialDirectoryLimitMapper.selectList(queryWrapper); + List socialDirectorySelfList = socialDirectorySelfMapper.selectList(queryWrapper); + Map upinfoMap = socialDirectoryUpinfoList.stream() + .collect(Collectors.toMap(SocialDirectoryUpinfo::getCode, upinfo -> upinfo)); + Map limitMap = socialDirectoryLimitList.stream() + .collect(Collectors.toMap(SocialDirectoryLimit::getCode, limit -> limit)); + Map selfMap = socialDirectorySelfList.stream() + .collect(Collectors.toMap(SocialDirectorySelf::getCode, self -> self)); + + for(SocialDirectory socialDirectory : socialDirectoryList){ + SocialDirectoryView socialDirectoryView = new SocialDirectoryView(); + socialDirectoryView.setJson(JSONObject.parseObject(socialDirectory.getData())); + socialDirectoryView.setData(null); + BeanUtils.copyProperties(socialDirectory, socialDirectoryView); + // 合并 SocialDirectoryUpinfo 数据 + SocialDirectoryUpinfo upinfo = upinfoMap.get(socialDirectory.getCode()); + if (upinfo != null) { + socialDirectoryView.setBegndate(upinfo.getBegndate()); + socialDirectoryView.setEnddate(upinfo.getEnddate()); + socialDirectoryView.setWubi(upinfo.getWubi()); + socialDirectoryView.setPinyin(upinfo.getPinyin()); + } + + // 合并 SocialDirectoryLimit 数据 + SocialDirectoryLimit limit = limitMap.get(socialDirectory.getCode()); + if (limit != null) { + socialDirectoryView.setHilistLmtpricType(limit.getHilistLmtpricType()); + socialDirectoryView.setHilistPricUplmtAmt(limit.getHilistPricUplmtAmt()); + } + + // 合并 SocialDirectorySelf 数据 + SocialDirectorySelf self = selfMap.get(socialDirectory.getCode()); + if (self != null) { + socialDirectoryView.setSelfpayPropType(self.getSelfpayPropType()); + socialDirectoryView.setSelfpayProp(self.getSelfpayProp()); + } socialDirectoryViewList.add(socialDirectoryView); } + + return socialDirectoryViewList; } @@ -383,22 +483,31 @@ public class SocialDirectoryService extends BaseService { } public Page getDocList(int type, int page, int size, String keyword) { - QueryWrapper codeqw = new QueryWrapper<>(); - codeqw.eq("type", type); + + Query query = new Query(); + query.addCriteria(Criteria.where("type").is(type)); + + if (!keyword.trim().isEmpty()) { + query.addCriteria(new Criteria().orOperator( + Criteria.where("code").regex(keyword, "i"), + Criteria.where("name").regex(keyword, "i"), + Criteria.where("keyword").regex(keyword, "i"), + Criteria.where("producer").regex(keyword, "i") + )); + } + long count = mongoTemplate.count(query, SocialDirectoryMongodb.class,"social_directory"); + query.skip((long) (page - 1) * size).limit(size); + List mongodbList = mongoTemplate.find(query, SocialDirectoryMongodb.class,"social_directory"); + List codeList=new ArrayList<>(); + for(SocialDirectoryMongodb mongodb:mongodbList){ + codeList.add(mongodb.getCode()); + } + //模糊搜索 - if (!keyword.trim().isEmpty()) { - codeqw.like("name", keyword); - codeqw.or().like("code", keyword); - codeqw.or().like("keyword", keyword); - } +// // 执行查询 - codeqw.select("code"); - long count = socialDirectoryMapper.selectCount(codeqw); - - codeqw.last("LIMIT " + size + " OFFSET " + (page - 1) * size); - List codeList = listObjs(codeqw, socialDirectoryMapper, obj -> obj.toString()); Page result = new Page<>(); if (!codeList.isEmpty()) { List list = fullList(codeList);