You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-spms-java/src/main/java/com/glxp/api/service/thrsys/ThirdAliDrugService.java

146 lines
5.3 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.glxp.api.service.thrsys;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.glxp.api.dao.thrsys.ThirdAliDrugMapper;
import com.glxp.api.entity.thrsys.ThirdAliDrug;
import com.glxp.api.exception.JsonException;
import com.glxp.api.req.thrsys.ThirdAliDrugRequest;
import com.glxp.api.service.auth.CustomerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
@Service
@Slf4j
public class ThirdAliDrugService extends ServiceImpl<ThirdAliDrugMapper, ThirdAliDrug> {
@Resource
private CustomerService customerService;
//解析TXT获取对应的对象列表
@Transactional(rollbackFor = Exception.class)
public void txtUpload(MultipartFile file) {
try {
String fileName = file.getOriginalFilename();
String suffix = FileUtil.getSuffix(fileName);
if (!"txt".equals(suffix)) {
throw new JsonException("仅支持TXT文件类型错误" + suffix);
}
log.info(file.getSize() + "文件长度");
if (file.getSize() > 100 * 1024 * 1024) {
throw new JsonException("上传文件超过100M");
}
List<ThirdAliDrug> thirdAliDrugs = new ArrayList<>();
String customerId = customerService.getCustomerId();
try (BufferedReader br = new BufferedReader(new InputStreamReader(file.getInputStream()))) {
String line;
while ((line = br.readLine()) != null) {
String[] fields = fillEmptyParts(line);
Date createTime = new Date();
if (fields.length == 11) {
ThirdAliDrug medicine = new ThirdAliDrug(
fields[0].trim(),
fields[1].trim(),
fields[2].trim(),
fields[3].trim(),
fields[4].trim(),
fields[5].trim(),
fields[6].trim(),
fields[7].trim(),
fields[8].trim(),
fields[9].trim(),
fields[10].trim(),
createTime,
createTime
);
if (StrUtil.isNotEmpty(medicine.getNameCode())) {
int i = this.baseMapper.selectDrugsByNameCodes(medicine.getNameCode());
if (i == 0) {
medicine.setErpId(customerId);
thirdAliDrugs.add(medicine);
if (CollUtil.isNotEmpty(thirdAliDrugs) && thirdAliDrugs.size() >= 500) {
this.baseMapper.saveOrUpdateBatch(thirdAliDrugs);
thirdAliDrugs.clear();
}
}
}
}
}
} catch (IOException e) {
throw new JsonException("上传失败:" + "标识重复");
}
if (CollUtil.isNotEmpty(thirdAliDrugs)) {
this.baseMapper.saveOrUpdateBatch(thirdAliDrugs);
}
} catch (Exception e) {
throw new JsonException("上传失败:" + e.getMessage());
}
}
public static String[] fillEmptyParts(String input) {
// Step 1: Split the input string by commas
String[] parts = input.split(",");
// Step 2: Count the number of commas (which will be one less than the number of parts we want)
// But we need to account for leading/trailing commas as well, so we use a different approach
int commaCount = 0;
boolean inEmptyPart = true; // To handle leading commas
for (char c : input.toCharArray()) {
if (c == ',') {
commaCount++;
inEmptyPart = true; // Next part will be empty until we find non-comma characters
} else if (inEmptyPart && c != ' ') {
inEmptyPart = false; // We found the start of a non-empty part
}
}
int desiredArraySize = Math.max(commaCount + 1, parts.length);
String[] filledParts = new String[desiredArraySize];
Arrays.fill(filledParts, "");
int index = 0;
for (String part : parts) {
if (!part.trim().isEmpty()) {
filledParts[index++] = part.trim(); // Trim any surrounding spaces for cleanliness
}
}
return filledParts;
}
public List<ThirdAliDrug> filterList(ThirdAliDrugRequest thirdAliDrug) {
if (thirdAliDrug == null) {
return Collections.emptyList();
}
// 分页处理
thirdAliDrug.pageDispose();
return this.baseMapper.filterList(thirdAliDrug);
}
}