diff --git a/src/main/java/com/glxp/api/dao/thrsys/ThirdAliDrugMapper.java b/src/main/java/com/glxp/api/dao/thrsys/ThirdAliDrugMapper.java new file mode 100644 index 000000000..2900d7c4e --- /dev/null +++ b/src/main/java/com/glxp/api/dao/thrsys/ThirdAliDrugMapper.java @@ -0,0 +1,19 @@ +package com.glxp.api.dao.thrsys; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.glxp.api.entity.thrsys.ThirdAliDrug; +import com.glxp.api.req.thrsys.ThirdAliDrugRequest; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface ThirdAliDrugMapper extends BaseMapper { + + int selectDrugsByNameCodes(@Param("nameCode") String nameCode); + + int saveOrUpdateBatch(@Param("list") List list); + + List filterList(ThirdAliDrugRequest thirdAliDrug); +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/entity/thrsys/ThirdAliDrug.java b/src/main/java/com/glxp/api/entity/thrsys/ThirdAliDrug.java new file mode 100644 index 000000000..7d791aa6f --- /dev/null +++ b/src/main/java/com/glxp/api/entity/thrsys/ThirdAliDrug.java @@ -0,0 +1,145 @@ +package com.glxp.api.entity.thrsys; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +@ApiModel(description = "third_ali_drug") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "third_ali_drug") +public class ThirdAliDrug implements Serializable { + @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty(value = "") + private Integer id; + + /** + * 药品类型 + */ + @TableField(value = "`type`") + @ApiModelProperty(value = "药品类型") + private String type; + + /** + * 生产企业 + */ + @TableField(value = "manufacturer") + @ApiModelProperty(value = "生产企业") + private String manufacturer; + + /** + * 产品名称通用名称 + */ + @TableField(value = "cpmctymc") + @ApiModelProperty(value = "产品名称通用名称") + private String cpmctymc; + + /** + * 剂型 + */ + @TableField(value = "form") + @ApiModelProperty(value = "剂型") + private String form; + + /** + * 剂型规格 + */ + @TableField(value = "formSpec") + @ApiModelProperty(value = "剂型规格") + private String formSpec; + + /** + * 包装规格 + */ + @TableField(value = "bzgg") + @ApiModelProperty(value = "包装规格") + private String bzgg; + + /** + * 商品名称 + */ + @TableField(value = "spmc") + @ApiModelProperty(value = "商品名称") + private String spmc; + + /** + * 层级标识 + */ + @TableField(value = "nameCode") + @ApiModelProperty(value = "层级标识") + private String nameCode; + + /** + * 包装比例 + */ + @TableField(value = "packRatio") + @ApiModelProperty(value = "包装比例") + private String packRatio; + + /** + * 包装级别 + */ + @TableField(value = "packLevel") + @ApiModelProperty(value = "包装级别") + private String packLevel; + /** + * 包装级别 + */ + @TableField(value = "erpId") + @ApiModelProperty(value = "包装级别") + private String erpId; + + /** + * 批准文号 + */ + @TableField(value = "approvalNum") + @ApiModelProperty(value = "批准文号") + private String approvalNum; + + /** + * 创建时间 + */ + @TableField(value = "createTime") + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新时间 + */ + @TableField(value = "updateTime") + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + + + + private static final long serialVersionUID = 1L; + + public ThirdAliDrug(String type, String manufacturer, String cpmctymc, String form, String formSpec, String bzgg, String approvalNum, String spmc, String nameCode, String packRatio, String packLevel, Date createTime, Date updateTime) { + this.type = type; + this.manufacturer = manufacturer; + this.cpmctymc = cpmctymc; + this.form = form; + this.formSpec = formSpec; + this.bzgg = bzgg; + this.spmc = spmc; + this.nameCode = nameCode; + this.packRatio = packRatio; + this.packLevel = packLevel; + this.createTime = createTime; + this.updateTime = updateTime; + this.approvalNum = approvalNum; + } +} diff --git a/src/main/java/com/glxp/api/req/thrsys/ThirdAliDrugRequest.java b/src/main/java/com/glxp/api/req/thrsys/ThirdAliDrugRequest.java new file mode 100644 index 000000000..cd8c2b2f5 --- /dev/null +++ b/src/main/java/com/glxp/api/req/thrsys/ThirdAliDrugRequest.java @@ -0,0 +1,112 @@ +package com.glxp.api.req.thrsys; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.glxp.api.util.page.ListPageRequest; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +public class ThirdAliDrugRequest extends ListPageRequest { + + @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty(value = "") + private Integer id; + + /** + * 药品类型 + */ + @TableField(value = "`type`") + @ApiModelProperty(value = "药品类型") + private String type; + + /** + * 生产企业 + */ + @TableField(value = "manufacturer") + @ApiModelProperty(value = "生产企业") + private String manufacturer; + + /** + * 产品名称通用名称 + */ + @TableField(value = "cpmctymc") + @ApiModelProperty(value = "产品名称通用名称") + private String cpmctymc; + + /** + * 剂型 + */ + @TableField(value = "form") + @ApiModelProperty(value = "剂型") + private String form; + + /** + * 剂型规格 + */ + @TableField(value = "formSpec") + @ApiModelProperty(value = "剂型规格") + private String formSpec; + + /** + * 包装规格 + */ + @TableField(value = "bzgg") + @ApiModelProperty(value = "包装规格") + private String bzgg; + + /** + * 商品名称 + */ + @TableField(value = "spmc") + @ApiModelProperty(value = "商品名称") + private String spmc; + + /** + * 层级标识 + */ + @TableField(value = "nameCode") + @ApiModelProperty(value = "层级标识") + private String nameCode; + + /** + * 包装比例 + */ + @TableField(value = "packRatio") + @ApiModelProperty(value = "包装比例") + private String packRatio; + + /** + * 包装级别 + */ + @TableField(value = "packLevel") + @ApiModelProperty(value = "包装级别") + private String packLevel; + /** + * 包装级别 + */ + @TableField(value = "erpId") + @ApiModelProperty(value = "包装级别") + private String erpId; + + /** + * 创建时间 + */ + @TableField(value = "createTime") + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新时间 + */ + @TableField(value = "updateTime") + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + + private String approvalNum; + +} diff --git a/src/main/java/com/glxp/api/service/basic/UdiContrastService.java b/src/main/java/com/glxp/api/service/basic/UdiContrastService.java index cf9abb7b1..e33ca75c9 100644 --- a/src/main/java/com/glxp/api/service/basic/UdiContrastService.java +++ b/src/main/java/com/glxp/api/service/basic/UdiContrastService.java @@ -1,16 +1,13 @@ package com.glxp.api.service.basic; import com.glxp.api.common.util.ResultVOUtils; -import com.glxp.api.entity.thrsys.BasicInsDrugEntity; -import com.glxp.api.entity.thrsys.BasicInsMaterialEntity; -import com.glxp.api.entity.thrsys.YbDrug; +import com.glxp.api.entity.thrsys.*; import com.glxp.api.exception.JsonException; import com.glxp.api.req.basic.YbDrugDetailFilterRequest; import com.glxp.api.req.thrsys.ThrInsDrugFeeRequest; import com.glxp.api.req.thrsys.ThrInsMaterialFeeRequest; -import com.glxp.api.service.thrsys.BasicInsDrugService; -import com.glxp.api.service.thrsys.BasicInsMaterialService; -import com.glxp.api.service.thrsys.YbDrugService; +import com.glxp.api.service.thrsys.*; +import com.glxp.api.util.DimaUtil; import com.glxp.api.util.IntUtil; import org.apache.xmlbeans.impl.xb.xsdschema.Public; import org.aspectj.weaver.ast.Var; @@ -23,13 +20,11 @@ import com.glxp.api.constant.ConstantStatus; import com.glxp.api.dao.basic.UdiRelevanceDao; import com.glxp.api.entity.basic.UdiProductEntity; import com.glxp.api.entity.basic.UdiRelevanceEntity; -import com.glxp.api.entity.thrsys.ThrProductsEntity; import com.glxp.api.http.NmpaUdiClient; import com.glxp.api.req.basic.UdiCombineRequest; import com.glxp.api.req.basic.FilterUdiRelRequest; import com.glxp.api.req.thrsys.FilterThrProductsRequest; import com.glxp.api.res.basic.UdiRelevanceResponse; -import com.glxp.api.service.thrsys.ThrProductsService; import com.glxp.api.util.CustomUtil; import com.glxp.api.util.GennerOrderUtils; @@ -255,6 +250,9 @@ public class UdiContrastService { .orElse(null); } + @Resource + ThirdAliDrugService thirdAliDrugService; + public void createOnlyMainId(String mainId) { FilterThrProductsRequest filterThrProductsRequest = new FilterThrProductsRequest(); filterThrProductsRequest.setCode(mainId); @@ -282,18 +280,20 @@ public class UdiContrastService { ybHcflDetailFilterRequest.setPage(1); ybHcflDetailFilterRequest.setGoodsCode(thrProductsEntity.getYbbm()); List list = ybDrugService.getList(ybHcflDetailFilterRequest); + + UdiProductEntity udiProductEntity = new UdiProductEntity(); BeanUtils.copyProperties(thrProductsEntity, udiProductEntity); - udiProductEntity.setId(IdUtil.getSnowflakeNextId()); if (list != null && list.size() > 0) { YbDrug ybDrug = list.get(0); + udiProductEntity.setId(IdUtil.getSnowflakeNextId()); // udiProductEntity.setNameCode(thrProductsEntity.getCode()); udiProductEntity.setPrepnSpec(ybDrug.getRealityOutlook()); udiProductEntity.setZczbhhzbapzbh(ybDrug.getApprovalCode()); udiProductEntity.setCpmctymc(ybDrug.getRegisteredProductName()); udiProductEntity.setSpmc(ybDrug.getGoodsName()); - udiProductEntity.setBzgg(String.valueOf(ybDrug.getFactor())+ ybDrug.getMinUnit() + "/" + ybDrug.getUnit()); + udiProductEntity.setBzgg(String.valueOf(ybDrug.getFactor()) + ybDrug.getMinUnit() + "/" + ybDrug.getUnit()); udiProductEntity.setMatrial(ybDrug.getMaterialName()); udiProductEntity.setPackMatrial(ybDrug.getMaterialName()); udiProductEntity.setMedicareType(setMedicareType(ybDrug.getProductInsuranceType())); @@ -308,8 +308,6 @@ public class UdiContrastService { //商品条码 essentialDrugMarkName sptm // udiProductEntity.setSptm(ybDrug.getBusinessLicense()); udiProductEntity.setPrepnUnit(ybDrug.getRealityMedicinemodel()); - } - udiProductEntity.setUuid(udiRelevanceEntity.getUuid()); udiProductEntity.setDiType(1); udiProductEntity.setScbssfbhph("是"); @@ -323,12 +321,33 @@ public class UdiContrastService { if (StrUtil.isEmpty(udiProductEntity.getPrice())) { udiProductEntity.setPrice("0.00"); } + udiProductEntity.setUpdateTime(new Date()); udiProductEntity = UdiInfoUtil.initUdiInfoEntity(udiProductEntity); - udiProductService.insertUdiInfo(udiProductEntity); + List thirdAliDrugList = thirdAliDrugService.findByByApproved(ybDrug.getApprovalCode()); + if (CollUtil.isNotEmpty(thirdAliDrugList)) { + for (int i = 0; i < thirdAliDrugList.size(); i++) { + ThirdAliDrug thirdAliDrug = thirdAliDrugList.get(i); + List integers = DimaUtil.calculateLevels(thirdAliDrug.getPackRatio()); + udiProductEntity.setPackLevel(thirdAliDrug.getPackLevel()); + udiProductEntity.setBhxjsl(integers.get(IntUtil.value(thirdAliDrug.getPackLevel()) - 1)); + udiProductEntity.setNameCode(thirdAliDrug.getNameCode()); + if (IntUtil.value(thirdAliDrug.getPackLevel()) == 1) { + udiProductEntity.setXjdw(ybDrug.getMinUnit()); + udiProductEntity.setBhxjsl(ybDrug.getFactor()); + } + udiProductEntity.setDiType(IntUtil.value(thirdAliDrug.getPackLevel()) == 1 ? 1 : 4); + udiProductEntity.setId(IdUtil.getSnowflakeNextId()); + udiProductService.insertUdiInfo(udiProductEntity); + } + } else { + udiProductService.insertUdiInfo(udiProductEntity); + } + } // setLevel(udiRelevanceEntity.getUuid()); UdiProductEntity byUuid = udiProductService.findByUuid(udiRelevanceEntity.getUuid()); udiRelevanceEntity = udiRelevanceService.insertDefaultLevel(udiRelevanceEntity, byUuid); udiRelevanceService.insertUdiRelevance(udiRelevanceEntity); + udiProductService.updateLevelCount(udiRelevanceEntity); } else { //器械 ThrInsMaterialFeeRequest request = new ThrInsMaterialFeeRequest(); @@ -352,13 +371,14 @@ public class UdiContrastService { udiProductEntity.setUuid(udiRelevanceEntity.getUuid()); udiProductEntity.setProductType(ConstantStatus.PRODUCT_TYPE_THIRD); udiProductEntity.setDiType(1); - udiProductEntity.setPackLevel(1 + ""); udiProductEntity.setScbssfbhph("是"); udiProductEntity.setScbssfbhscrq("是"); udiProductEntity.setScbssfbhsxrq("是"); udiProductEntity.setScbssfbhxlh("否"); + udiProductEntity.setPackLevel(1 + ""); udiProductEntity.setProductsType(thrProductsEntity.getProductType()); udiProductEntity.setRequireScanCode(0); + udiProductEntity.setUpdateTime(new Date()); if (StrUtil.isEmpty(udiProductEntity.getPrice())) { udiProductEntity.setPrice(null); } @@ -416,6 +436,7 @@ public class UdiContrastService { } + public Boolean insertProduct(ThrProductsEntity thrProductsEntity, BasicInsMaterialEntity basicInsMaterialEntity, UdiRelevanceEntity udiRelevanceEntity) { //没有医保编码 UdiProductEntity udiProductEntity = new UdiProductEntity(); diff --git a/src/main/java/com/glxp/api/service/thrsys/ThirdAliDrugService.java b/src/main/java/com/glxp/api/service/thrsys/ThirdAliDrugService.java new file mode 100644 index 000000000..4fb390282 --- /dev/null +++ b/src/main/java/com/glxp/api/service/thrsys/ThirdAliDrugService.java @@ -0,0 +1,244 @@ +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.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +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 { + + @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 thirdAliDrugs = new ArrayList<>(); + + 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 == 9) { +// ThirdAliDrug medicine = new ThirdAliDrug( +// fields[0].trim(), +// fields[1].trim(), +// fields[2].trim(), +// fields[3].trim(), +// fields[4].trim(), +// fields[5].trim(), +// fields[5].trim(), +// fields[5].trim(), +// fields[6].trim(), +// fields[7].trim(), +// fields[8].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(); +// } +// } +// } +// }else +// if (fields.length == 10) { +// ThirdAliDrug medicine = new ThirdAliDrug( +// fields[0].trim(), +// fields[1].trim(), +// fields[2].trim(), +// fields[3].trim(), +// fields[4].trim(), +// fields[4].trim(), +// fields[6].trim(), +// fields[6].trim(), +// fields[7].trim(), +// fields[8].trim(), +// fields[9].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(); +// } +// } +// } +// }else + 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(); + } + } + } + } +// else 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[7].trim(), +// fields[8].trim(), +// fields[9].trim(), +// fields[10].trim(), +// fields[11].trim(), +// createTime, +// createTime +// ); +// +// if (StrUtil.isNotEmpty(medicine.getNameCode())) { +// int i = this.baseMapper.selectDrugsByNameCodes(medicine.getNameCode()); +// if (i == 0) { +// 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 + } + } + + // If the input ends with a comma, we need an extra empty part + // But we also need to handle the case where the input is just commas (e.g., ",,,") + // So we use Math.max to ensure we at least have one part if the input is non-empty + int desiredArraySize = Math.max(commaCount + 1, parts.length); + + // Step 3: Create a new array with the desired size and fill it with empty strings + String[] filledParts = new String[desiredArraySize]; + Arrays.fill(filledParts, ""); + + // Step 4: Copy non-empty parts from the original array to the new array + int index = 0; + for (String part : parts) { + if (!part.trim().isEmpty()) { + filledParts[index++] = part.trim(); // Trim any surrounding spaces for cleanliness + } + // Note: We don't increment index for empty parts because those are already represented by empty strings in filledParts + } + + // Note: At this point, if there were more commas than non-empty parts, the remaining elements in filledParts will be empty strings. + // If there were leading/trailing commas or multiple consecutive commas, those will also be represented by empty strings. + + return filledParts; + } + + + public List filterList(ThirdAliDrugRequest thirdAliDrug) { + if (thirdAliDrug == null) { + return Collections.emptyList(); + } + if (thirdAliDrug.getPage() != null) { + int offset = (thirdAliDrug.getPage() - 1) * thirdAliDrug.getLimit(); + PageHelper.offsetPage(offset, thirdAliDrug.getLimit()); + } + return this.baseMapper.filterList(thirdAliDrug); + } + + + public List findByByApproved(String approvalNum) { + return this.baseMapper.selectList(new LambdaQueryWrapper().eq(ThirdAliDrug::getApprovalNum, approvalNum)); + } +} diff --git a/src/main/java/com/glxp/api/util/DimaUtil.java b/src/main/java/com/glxp/api/util/DimaUtil.java new file mode 100644 index 000000000..9faa6d3f9 --- /dev/null +++ b/src/main/java/com/glxp/api/util/DimaUtil.java @@ -0,0 +1,37 @@ +package com.glxp.api.util; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author AnthonyYwj + * @date 2024/11/12 + */ +public class DimaUtil { + public static List calculateLevels(String ratio) { + // 分割比例字符串并转成整数数组 + String[] parts = ratio.split(":"); + int[] levels = new int[parts.length]; + + for (int i = 0; i < parts.length; i++) { + levels[i] = Integer.parseInt(parts[i]); + } + + // 存储每层级的倍数关系 + List calculatedLevels = new ArrayList<>(); + for (int i = levels.length - 1; i > 0; i--) { + calculatedLevels.add(levels[i] / levels[i - 1]); + } + + // 最后加上最小单位(第一层级为 1) + calculatedLevels.add(1); + + // 结果倒序 + List reversed = new ArrayList<>(); + for (int i = calculatedLevels.size() - 1; i >= 0; i--) { + reversed.add(calculatedLevels.get(i)); + } + + return reversed; + } +} diff --git a/src/main/resources/schemas/schema_v2.4.sql b/src/main/resources/schemas/schema_v2.4.sql index 78ebc9104..12e247124 100644 --- a/src/main/resources/schemas/schema_v2.4.sql +++ b/src/main/resources/schemas/schema_v2.4.sql @@ -4622,39 +4622,47 @@ CREATE TABLE IF NOT EXISTS `sys_workplace_freight` COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -CREATE TABLE IF NOT EXISTS `rel_code_batch` ( - `id` int NOT NULL AUTO_INCREMENT, - `productCode` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '产品编码', - `subTypeNo` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '类型编码', - `cascadeRatio` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '包装比例', - `packageSpec` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '包装规格', - `comment` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注', - `batchNo` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '批次号', - `madeDate` datetime DEFAULT NULL COMMENT '生产日期', - `validateDate` datetime DEFAULT NULL COMMENT '失效日期', - `workShop` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '生产车间', - `lineName` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '生产线', - `lineManager` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '负责人', - `createTime` datetime DEFAULT NULL COMMENT '创建时间', - `createUser` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人', - `updateTime` datetime DEFAULT NULL COMMENT '更新时间', - `updateUser` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人', - `parentCode` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '父级码', - `uploadFlagUp` tinyint(1) DEFAULT '0' COMMENT '0 未上传 1已上传 2上传失败', - `uploadFlagDown` tinyint(1) DEFAULT '0' COMMENT '0 未上传 1已上传 2上传失败', - `erpId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '供应商ID', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; - -CREATE TABLE IF NOT EXISTS `rel_code_detail` ( - `id` int NOT NULL AUTO_INCREMENT, - `curCode` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '当前条码', - `packLayer` tinyint DEFAULT NULL COMMENT '包装级别', - `parentCode` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '父级码', - `flag` tinyint DEFAULT NULL COMMENT '状态', - `batchIdFk` int DEFAULT NULL COMMENT '产品批次ID外键', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +CREATE TABLE IF NOT EXISTS `rel_code_batch` +( + `id` int NOT NULL AUTO_INCREMENT, + `productCode` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '产品编码', + `subTypeNo` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '类型编码', + `cascadeRatio` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '包装比例', + `packageSpec` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '包装规格', + `comment` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注', + `batchNo` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '批次号', + `madeDate` datetime DEFAULT NULL COMMENT '生产日期', + `validateDate` datetime DEFAULT NULL COMMENT '失效日期', + `workShop` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '生产车间', + `lineName` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '生产线', + `lineManager` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '负责人', + `createTime` datetime DEFAULT NULL COMMENT '创建时间', + `createUser` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人', + `updateTime` datetime DEFAULT NULL COMMENT '更新时间', + `updateUser` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人', + `parentCode` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '父级码', + `uploadFlagUp` tinyint(1) DEFAULT '0' COMMENT '0 未上传 1已上传 2上传失败', + `uploadFlagDown` tinyint(1) DEFAULT '0' COMMENT '0 未上传 1已上传 2上传失败', + `erpId` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '供应商ID', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 1 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci; + +CREATE TABLE IF NOT EXISTS `rel_code_detail` +( + `id` int NOT NULL AUTO_INCREMENT, + `curCode` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '当前条码', + `packLayer` tinyint DEFAULT NULL COMMENT '包装级别', + `parentCode` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '父级码', + `flag` tinyint DEFAULT NULL COMMENT '状态', + `batchIdFk` int DEFAULT NULL COMMENT '产品批次ID外键', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 1 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci; CALL Pro_Temp_ColumnWork('sys_workplace_queue', 'layer', 'int NULL DEFAULT NULL COMMENT ''层级标记''', @@ -4791,3 +4799,29 @@ CALL Pro_Temp_ColumnWork('rel_code_batch', 'threeLevelCount', CALL Pro_Temp_ColumnWork('basic_products', 'detailSort', ' tinyint DEFAULT NULL COMMENT ''明细分类''', 1); +CREATE TABLE IF NOT EXISTS `third_ali_drug` +( + ` id ` int NOT NULL AUTO_INCREMENT, + ` type ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '药品类型', + ` manufacturer ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '生产企业', + ` cpmctymc ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '产品名称通用名称', + ` form ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '剂型', + ` formSpec ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '剂型规格', + ` bzgg ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '包装规格', + ` spmc ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品名称', + ` nameCode ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '层级标识', + ` packRatio ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '包装比例', + ` packLevel ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '包装级别', + ` createTime ` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + ` updateTime ` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + ` erpId ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + ` approvalNum ` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '批准文号', + PRIMARY KEY (` id `) USING BTREE, + UNIQUE INDEX ` nameCode ` (` nameCode `) USING BTREE, + INDEX ` approvalNum ` (` approvalNum `) USING BTREE, + INDEX ` cpmctymc ` (` cpmctymc `) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 8052 + CHARACTER SET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci + ROW_FORMAT = Dynamic; \ No newline at end of file