diff --git a/pom.xml b/pom.xml index 02629d5..7140ddc 100644 --- a/pom.xml +++ b/pom.xml @@ -85,8 +85,6 @@ - - org.projectlombok @@ -129,7 +127,11 @@ org.springframework.boot spring-boot-starter-data-mongodb - + + org.apache.poi + poi-ooxml + 5.2.3 + 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/inventory/InventoryPurchaseService.java b/src/main/java/com/syjiaer/clinic/server/service/inventory/InventoryPurchaseService.java index c62c783..d763dab 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/inventory/InventoryPurchaseService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/inventory/InventoryPurchaseService.java @@ -18,17 +18,20 @@ import com.syjiaer.clinic.server.mapper.inventory.*; import com.syjiaer.clinic.server.mapper.manager.ManagerUserMapper; import com.syjiaer.clinic.server.service.BaseService; import com.syjiaer.clinic.server.service.goods.GoodsService; +import jakarta.annotation.Resource; +import org.apache.poi.ss.usermodel.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ResourceUtils; +import java.io.*; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; - @Service public class InventoryPurchaseService extends BaseService { @Autowired @@ -52,6 +55,7 @@ public class InventoryPurchaseService extends BaseService { @Autowired private InventoryPurchaseLogMapper inventoryPurchaseLogMapper; + /* * 创建采购订单 * @param inventoryPurchase 采购订单 @@ -417,4 +421,43 @@ public class InventoryPurchaseService extends BaseService { inventoryPurchaseMapper.update(null, updateOrder); } } + public String toExcel(List cateIdList){ + + try { + + + ClassLoader classLoader = getClass().getClassLoader(); + // 资源文件的路径 + InputStream inputStream = classLoader.getResourceAsStream("excelTemplate/PurchasingTemplate.xlsx"); + Workbook workbook = WorkbookFactory.create(inputStream); + + // 2. 获取第一个Sheet + Sheet sheet = workbook.getSheetAt(0); + + // 3. 修改内容(例如在A1单元格写入新内容) + Row row = sheet.getRow(10); + if (row == null) { + row = sheet.createRow(10); + } + Cell cell = row.getCell(0); + if (cell == null) { + cell = row.createCell(0); + } + cell.setCellValue("你好"); + + // 4. 保存为新文件 + FileOutputStream outFile = new FileOutputStream("D:\\new_excel.xlsx"); + workbook.write(outFile); + + // 5. 关闭流 + outFile.close(); + inputStream.close(); + + System.out.println("Excel文件生成成功!"); + } catch (IOException e) { + e.printStackTrace(); + } + + return ""; + } } 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..e9a255c 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,27 @@ 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()) { - codeqw.like("name", keyword); - codeqw.or().like("code", keyword); - codeqw.or().like("keyword", keyword); + 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()); } - // 执行查询 - 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); diff --git a/src/main/resources/excelTemplate/PurchasingTemplate.xlsx b/src/main/resources/excelTemplate/PurchasingTemplate.xlsx new file mode 100644 index 0000000..a73c8ee Binary files /dev/null and b/src/main/resources/excelTemplate/PurchasingTemplate.xlsx differ