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);