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-wms-java/src/main/java/com/glxp/api/service/collect/RelCodeBatchService.java

608 lines
29 KiB
Java

package com.glxp.api.service.collect;
10 months ago
import cn.hutool.core.collection.CollUtil;
10 months ago
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
9 months ago
import cn.hutool.core.thread.ThreadUtil;
10 months ago
import cn.hutool.core.util.StrUtil;
10 months ago
import cn.hutool.core.util.XmlUtil;
import cn.hutool.json.JSONUtil;
10 months ago
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
10 months ago
import com.github.pagehelper.PageHelper;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.dao.collect.RelCodeBatchMapper;
import com.glxp.api.dao.inout.IoCodeTempDao;
10 months ago
import com.glxp.api.entity.auth.AuthAdmin;
import com.glxp.api.entity.basic.BasicCorpEntity;
import com.glxp.api.entity.basic.ProductInfoEntity;
import com.glxp.api.entity.basic.UdiEntity;
import com.glxp.api.entity.basic.UdiProductEntity;
import com.glxp.api.entity.collect.RelCodeBatch;
10 months ago
import com.glxp.api.entity.collect.RelCodeDetail;
import com.glxp.api.entity.inout.IoCodeTempEntity;
import com.glxp.api.entity.system.CompanyEntity;
8 months ago
import com.glxp.api.entity.system.SyncDataSetEntity;
10 months ago
import com.glxp.api.exception.JsonException;
import com.glxp.api.http.sync.SpGetHttpClient;
import com.glxp.api.http.sync.SpsDirectClient;
import com.glxp.api.req.alihealth.AlihealthRelCodeInsertReqeust;
10 months ago
import com.glxp.api.req.collect.RelCodeBatchRequest;
10 months ago
import com.glxp.api.req.collect.RelCodeDetailRequest;
import com.glxp.api.res.alihealth.AlihealthKytSinglerelationResponse;
10 months ago
import com.glxp.api.res.collect.RelCodeBatchResponse;
import com.glxp.api.res.collect.RelCodeDetailByParentCodeResponse;
10 months ago
import com.glxp.api.service.auth.CustomerService;
import com.glxp.api.service.basic.ProductInfoService;
import com.glxp.api.service.basic.UdiProductService;
import com.glxp.api.service.basic.impl.BasicCorpServiceImpl;
8 months ago
import com.glxp.api.service.sync.SyncDataSetService;
import com.glxp.api.service.system.impl.CompanyServiceImpl;
import com.glxp.api.util.StringUtils;
import com.glxp.api.util.udi.FilterUdiUtils;
10 months ago
import lombok.extern.slf4j.Slf4j;
10 months ago
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
10 months ago
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
10 months ago
@Service
10 months ago
@Slf4j
public class RelCodeBatchService extends ServiceImpl<RelCodeBatchMapper, RelCodeBatch> {
10 months ago
@Resource
private RelCodeDetailService relCodeDetailService;
10 months ago
@Resource
private CustomerService customerService;
@Resource
private ProductInfoService productInfoService;
@Resource
private CompanyServiceImpl companyService;
@Resource
private BasicCorpServiceImpl basicCorpService;
@Resource
private RelCodeBatchService relCodeBatchService;
10 months ago
/**
*
*
10 months ago
* @param file
*/
@Transactional(rollbackFor = Exception.class)
public void xmlUpload(MultipartFile file) {
8 months ago
try {
String fileName = file.getOriginalFilename();
String suffix = FileUtil.getSuffix(fileName);
if (!"xml".equals(suffix)) {
throw new JsonException("仅支持XML文件类型错误" + suffix);
}
log.info(file.getSize() + "文件长度");
if (file.getSize() > 5 * 1024 * 1024) {
throw new JsonException("上传文件超过5M");
}
Document document = XmlUtil.readXML(file.getInputStream());
//获取根
Element rootElement = XmlUtil.getRootElement(document);
this.ProcessData(rootElement);
8 months ago
} catch (Exception e) {
throw new JsonException("上传失败:" + e.getMessage());
}
}
10 months ago
/**
*
*
10 months ago
* @param relCodeBatchRequest
*/
@Transactional(rollbackFor = Exception.class)
public void add(RelCodeBatchRequest relCodeBatchRequest) {
String productCode = relCodeBatchRequest.getProductCode();
String subTypeNo = relCodeBatchRequest.getSubTypeNo();
String batchNo = relCodeBatchRequest.getBatchNo();
//如果不存在就添加
List<RelCodeBatch> list = this.list(new LambdaQueryWrapper<RelCodeBatch>()
.eq(RelCodeBatch::getProductCode, productCode)
.eq(RelCodeBatch::getSubTypeNo, subTypeNo)
.eq(RelCodeBatch::getBatchNo, batchNo));
if (CollUtil.isNotEmpty(list)) {
throw new JsonException("层级编码:【" + productCode + "】;类型编码:【" + subTypeNo + "】;批次号:【" + batchNo + "】已存在!");
}
10 months ago
List<RelCodeDetailRequest> detailList = relCodeBatchRequest.getDetailList();
if (CollUtil.isEmpty(detailList)) {
10 months ago
throw new JsonException("关联明细不能为空!");
}
AuthAdmin user = customerService.getUserBean();
RelCodeDetailRequest relCodeDetailRequest = detailList.get(0);
10 months ago
RelCodeBatch relCodeBatch = new RelCodeBatch();
BeanUtils.copyProperties(relCodeBatchRequest, relCodeBatch);
10 months ago
relCodeBatch.setCreateTime(new Date());
relCodeBatch.setCreateUser(user.getUserName());
relCodeBatch.setUpdateTime(new Date());
relCodeBatch.setUpdateUser(user.getUserName());
String customerId = String.valueOf(user.getCustomerId());
relCodeBatch.setErpId(customerId);
relCodeBatch.setCurCode(relCodeDetailRequest.getParentCode());
10 months ago
this.save(relCodeBatch);
List<RelCodeDetail> relCodeDetails = new ArrayList<>();
for (RelCodeDetailRequest request : detailList) {
10 months ago
RelCodeDetail relCodeDetail = new RelCodeDetail();
String parentCode = request.getParentCode();
request.setParentCode(StrUtil.isNotBlank(parentCode) ? parentCode : "0");
BeanUtils.copyProperties(request, relCodeDetail);
10 months ago
relCodeDetail.setBatchIdFk(relCodeBatch.getId());
relCodeDetails.add(relCodeDetail);
}
relCodeDetailService.saveBatch(relCodeDetails);
this.updateDrugLevelCount(relCodeBatch);
10 months ago
}
10 months ago
public List<RelCodeBatchResponse> filterList(RelCodeBatchRequest relCodeBatchRequest) {
if (relCodeBatchRequest == null) {
return Collections.emptyList();
}
if (relCodeBatchRequest.getPage() != null) {
int offset = (relCodeBatchRequest.getPage() - 1) * relCodeBatchRequest.getLimit();
PageHelper.offsetPage(offset, relCodeBatchRequest.getLimit());
}
return this.baseMapper.filterList(relCodeBatchRequest);
}
9 months ago
@Transactional(rollbackFor = Exception.class)
10 months ago
public void delete(Long id) {
if (id == null) {
10 months ago
throw new JsonException("id 不能为空");
}
relCodeDetailService.remove(new LambdaQueryWrapper<RelCodeDetail>().eq(RelCodeDetail::getBatchIdFk, id));
10 months ago
this.removeById(id);
}
@Transactional(rollbackFor = Exception.class)
public void addRelCodeSpellBox(List<RelCodeBatchRequest> relCodeBatchRequests) {
if (CollUtil.isEmpty(relCodeBatchRequests)) {
throw new JsonException("单据信息异常!");
}
relCodeBatchRequests.forEach(item -> {
this.add(item);
});
}
@Transactional(rollbackFor = Exception.class)
public void deleteDetail(String curCode) {
List<RelCodeDetail> list = relCodeDetailService.list(new LambdaQueryWrapper<RelCodeDetail>().eq(RelCodeDetail::getParentCode, curCode));
if (CollUtil.isNotEmpty(list)) {
List<Integer> batchIds = list.stream().map(RelCodeDetail::getBatchIdFk).collect(Collectors.toList());
this.removeBatchByIds(batchIds);
relCodeDetailService.remove(new LambdaQueryWrapper<RelCodeDetail>().in(RelCodeDetail::getBatchIdFk, batchIds));
}
}
@Transactional(rollbackFor = Exception.class)
public void deleteAllDetail(List<RelCodeDetailRequest> detailList) {
if (CollUtil.isNotEmpty(detailList)) {
detailList.forEach(item -> {
String curCode = item.getCurCode();
this.deleteDetail(curCode);
});
}
}
public boolean batchExist(String parentCode) {
//1、排除掉层级是1的
UdiEntity udi = FilterUdiUtils.getUdi(parentCode);
String udi1 = udi.getUdi();
ProductInfoEntity byNameCode = productInfoService.findByNameCode(udi1);
if (byNameCode != null && "1".equals(byNameCode.getPackLevel())) return true;
//2、本地查询
List<RelCodeBatch> navList = this.list(new LambdaQueryWrapper<RelCodeBatch>()
.eq(RelCodeBatch::getParentCode, parentCode));
if (CollUtil.isNotEmpty(navList)) return true;
//3、查不到进行远程拉取更新
return this.UpdateDetailByParentCode(parentCode);
}
/**
* parentCode spms
*/
public boolean UpdateDetailByParentCode(String parentCode) {
List<RelCodeDetailByParentCodeResponse> list = this.detailByParentCode(parentCode);
if (CollUtil.isNotEmpty(list)) {
for (int i = 0; i < list.size(); i++) {
try {
RelCodeDetailByParentCodeResponse relCodeDetailByParentCodeResponse = list.get(i);
this.saveDetailByParentCode(relCodeDetailByParentCodeResponse);
List<RelCodeDetailByParentCodeResponse> relCodeDetailSons = relCodeDetailByParentCodeResponse.getRelCodeDetailSons();
if (CollUtil.isNotEmpty(relCodeDetailSons)) {
relCodeDetailSons.forEach(item -> {
this.saveDetailByParentCode(item);
});
}
} catch (Exception e) {
log.error("拉取SPMS同步库进行更新失败:[" + parentCode + "]");
log.error(e.getMessage(), e);
}
}
return true;
} else
return false;
}
public void saveDetailByParentCode(RelCodeDetailByParentCodeResponse relCodeDetailByParentCodeResponse) {
String productCode = relCodeDetailByParentCodeResponse.getProductCode();
String subTypeNo = relCodeDetailByParentCodeResponse.getSubTypeNo();
String batchNo = relCodeDetailByParentCodeResponse.getBatchNo();
String parentCode1 = relCodeDetailByParentCodeResponse.getParentCode();
//如果不存在就添加
List<RelCodeBatch> navList = this.list(new LambdaQueryWrapper<RelCodeBatch>()
.eq(RelCodeBatch::getProductCode, productCode)
.eq(StrUtil.isNotBlank(subTypeNo), RelCodeBatch::getSubTypeNo, subTypeNo)
.eq(RelCodeBatch::getBatchNo, batchNo)
.eq(RelCodeBatch::getParentCode, parentCode1));
if (CollUtil.isEmpty(navList)) {
RelCodeBatch relCodeBatch = new RelCodeBatch();
BeanUtils.copyProperties(relCodeDetailByParentCodeResponse, relCodeBatch);
relCodeBatch.setId(null);
relCodeBatch.setCreateTime(new Date());
relCodeBatch.setUpdateTime(new Date());
relCodeBatch.setUploadFlagUp(1);
relCodeBatch.setUploadFlagDown(0);
this.save(relCodeBatch);
List<RelCodeDetail> detailList = relCodeDetailByParentCodeResponse.getRelCodeDetail();
List<RelCodeDetail> relCodeDetails = new ArrayList<>();
for (RelCodeDetail relCodeDetail : detailList) {
relCodeDetail.setId(null);
relCodeDetail.setBatchIdFk(relCodeBatch.getId());
relCodeDetails.add(relCodeDetail);
}
relCodeDetailService.saveBatch(relCodeDetails);
}
}
@Resource
SpsDirectClient spsDirectClient;
@Resource
private SpGetHttpClient spGetHttpClient;
/**
* spms
*/
public List<RelCodeDetailByParentCodeResponse> detailByParentCode(String parentCode) {
try {
return spsDirectClient.detailByParentCode(parentCode);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Resource
IoCodeTempDao ioCodeTempDao;
@Resource
UdiProductService udiProductService;
8 months ago
@Resource
SyncDataSetService syncDataSetService;
public void threadUpdateIoCodeTempEntity(String parentCode) {
8 months ago
SyncDataSetEntity syncDataSetEntity = syncDataSetService.findSet();
if(syncDataSetEntity == null || StrUtil.isEmpty(syncDataSetEntity.getSyncIp())){
return;
}
ThreadUtil.execAsync(() -> {
List<IoCodeTempEntity> ioCodeTempEntities = ioCodeTempDao.selectList(new LambdaQueryWrapper<IoCodeTempEntity>().eq(IoCodeTempEntity::getCode, parentCode));
if (CollUtil.isNotEmpty(ioCodeTempEntities)) {
IoCodeTempEntity codeTempEntity = ioCodeTempEntities.get(0);
//1、排除掉层级是1的
UdiEntity udi = FilterUdiUtils.getUdi(parentCode);
if (udi == null)
return;
String udi1 = udi.getUdi();
UdiProductEntity udiProductEntity = udiProductService.findByNameCode(udi1);
if (udiProductEntity == null)
return;
List<RelCodeBatch> navList = this.list(new LambdaQueryWrapper<RelCodeBatch>()
.eq(RelCodeBatch::getParentCode, parentCode));
//
if (navList == null || navList.size() == 0) {
CompanyEntity companyEntity = companyService.findCompany();
BasicCorpEntity basicCorpEntity = basicCorpService.selectByErpId(codeTempEntity.getSupId());
AlihealthRelCodeInsertReqeust alihealthRelCodeInsertReqeust = new AlihealthRelCodeInsertReqeust();
alihealthRelCodeInsertReqeust.setName(basicCorpEntity.getName());
alihealthRelCodeInsertReqeust.setAppKey(companyEntity.getAppId());
alihealthRelCodeInsertReqeust.setAppSecret(companyEntity.getAppSecret());
alihealthRelCodeInsertReqeust.setCustomerId(codeTempEntity.getSupId());
alihealthRelCodeInsertReqeust.setCode(parentCode);
alihealthRelCodeInsertReqeust.setRefEntId(companyEntity.getRefEntId());
BaseResponse baseResponse = spGetHttpClient.relCodeInsert(alihealthRelCodeInsertReqeust);
if (baseResponse.getCode() == 20000) {
System.out.println("sda" + baseResponse.getData().toString());
AlihealthKytSinglerelationResponse alihealthKytSinglerelationResponse = JSONUtil.toBean(baseResponse.getData().toString(), AlihealthKytSinglerelationResponse.class);
// 返回的码关联关系进行插入
RelCodeBatch relCodeBatch = alihealthKytSinglerelationResponse.disposeRelCodeBatch(alihealthRelCodeInsertReqeust.getCustomerId());
RelCodeBatch relCodeBatchOne = relCodeBatchService.getOne(new QueryWrapper<RelCodeBatch>().eq("productCode", relCodeBatch.getProductCode())
.last("limit 1")
);
if (Objects.isNull(relCodeBatchOne)) {
relCodeBatch.setCreateUser(alihealthRelCodeInsertReqeust.getCustomerId());
relCodeBatch.setCreateTime(new Date());
relCodeBatchService.save(relCodeBatch);
} else {
relCodeBatchService.update(relCodeBatch, new QueryWrapper<RelCodeBatch>().eq("productCode", relCodeBatch.getProductCode()));
}
Integer id = Objects.isNull(relCodeBatch.getId()) ? relCodeBatchOne.getId() : relCodeBatch.getId();
// 进行查询
List<RelCodeDetail> list = alihealthKytSinglerelationResponse.disposeRelRodeDetailList(id);
if (list != null && list.size() > 0) {
List curCodeList = new ArrayList();
for (RelCodeDetail relCodeDetail : list) {
curCodeList.add(relCodeDetail.getCurCode());
}
relCodeDetailService.remove(new QueryWrapper<RelCodeDetail>().in("curCode", curCodeList));
relCodeDetailService.saveBatch(list);
}
// 插入成功就重新查询一下
navList = this.list(new LambdaQueryWrapper<RelCodeBatch>()
.eq(RelCodeBatch::getCurCode, parentCode));
if (StringUtils.isEmpty(companyEntity.getRefEntId())) {
companyEntity.setRefEntId(alihealthKytSinglerelationResponse.getRefEntId());
companyService.modifyCompany(companyEntity);
}
} else {
if (StringUtils.isNotEmpty(companyEntity.getRefEntId())) {
companyEntity.setRefEntId(null);
companyService.modifyCompany(companyEntity);
}
log.error(baseResponse.getMessage());
}
}
if ((udiProductEntity != null && "1".equals(udiProductEntity.getPackLevel()))
|| (CollUtil.isNotEmpty(navList))
) {
//打上匹配到了药品关联关系的标记
for (int i = 0; i < ioCodeTempEntities.size(); i++) {
IoCodeTempEntity ioCodeTempEntity = ioCodeTempEntities.get(i);
ioCodeTempEntity.setDrugLink(1);
ioCodeTempDao.updateById(ioCodeTempEntity);
}
} else {
asynThreadUpdateIoCodeTempEntity(parentCode, ioCodeTempEntities);
}
9 months ago
}
});
}
9 months ago
public void asynThreadUpdateIoCodeTempEntity(String parentCode, List<IoCodeTempEntity> ioCodeTempEntities) {
if (this.batchExist(parentCode)) {
9 months ago
//打上匹配到了药品关联关系的标记
for (int i = 0; i < ioCodeTempEntities.size(); i++) {
IoCodeTempEntity ioCodeTempEntity = ioCodeTempEntities.get(i);
ioCodeTempEntity.setDrugLink(1);
ioCodeTempDao.updateById(ioCodeTempEntity);
}
} else {
9 months ago
//打上匹配不到了药品关联关系的标记
for (int i = 0; i < ioCodeTempEntities.size(); i++) {
IoCodeTempEntity ioCodeTempEntity = ioCodeTempEntities.get(i);
ioCodeTempEntity.setDrugLink(0);
ioCodeTempDao.updateById(ioCodeTempEntity);
}
}
9 months ago
}
@Transactional(rollbackFor = Exception.class)
void ProcessData(Element rootElement) {
8 months ago
//截取Relation
NodeList relation = rootElement.getElementsByTagName("Relation");
if (relation == null) {
throw new JsonException("XML文件解析错误");
}
Element relationE = (Element) relation.item(0);
//截取Batch
NodeList batch = rootElement.getElementsByTagName("Batch");
if (batch == null) {
throw new JsonException("XML文件解析错误");
}
String productCode = relationE.getAttribute("productCode");
String subTypeNo = relationE.getAttribute("subTypeNo");
String cascade = relationE.getAttribute("cascade");
String packageSpec = relationE.getAttribute("packageSpec");
String comment = relationE.getAttribute("comment");
AuthAdmin user = customerService.getUserBean();
for (int i = 0; i < batch.getLength(); i++) {
Node batchNode = batch.item(i);
RelCodeBatch relCodeBatch = new RelCodeBatch();
Map<String, List<RelCodeDetail>> codeMap = new HashMap<>();
if (batchNode.getNodeType() == Node.ELEMENT_NODE) {
Element batchE = (Element) batchNode;
String batchNo = batchE.getAttribute("batchNo");
String madeDate = batchE.getAttribute("madeDate");
String validateDate = batchE.getAttribute("validateDate");
String workShop = batchE.getAttribute("workShop");
String lineName = batchE.getAttribute("lineName");
String lineManager = batchE.getAttribute("lineManager");
String customerId = String.valueOf(user.getCustomerId());
relCodeBatch.setProductCode(productCode);
relCodeBatch.setSubTypeNo(subTypeNo);
relCodeBatch.setCascadeRatio(cascade);
relCodeBatch.setPackageSpec(packageSpec);
relCodeBatch.setComment(comment);
relCodeBatch.setBatchNo(batchNo);
relCodeBatch.setMadeDate(madeDate);
relCodeBatch.setValidateDate(String.valueOf(DateUtil.offsetDay(DateUtil.parse(validateDate, "yyyy-MM-dd"), 1)));
relCodeBatch.setLineName(lineName);
relCodeBatch.setWorkShop(workShop);
relCodeBatch.setLineManager(lineManager);
relCodeBatch.setCreateTime(new Date());
relCodeBatch.setCreateUser(user.getUserName());
relCodeBatch.setUpdateTime(new Date());
relCodeBatch.setUpdateUser(user.getUserName());
relCodeBatch.setErpId(customerId);
relCodeBatch.setUploadFlagDown(1);
relCodeBatch.setUploadFlagUp(0);
//batch下的节点code
NodeList code = batchNode.getChildNodes();
for (int j = 0; j < code.getLength(); j++) {
Node codeNode = code.item(j);
if (codeNode.getNodeType() == Node.ELEMENT_NODE) {
RelCodeDetail relCodeDetail = new RelCodeDetail();
Element codeE = (Element) codeNode;
String curCode = codeE.getAttribute("curCode");
Integer packLayer = Integer.valueOf(codeE.getAttribute("packLayer"));
relCodeDetail.setBatchIdFk(relCodeBatch.getId());
relCodeDetail.setCurCode(curCode);
relCodeDetail.setPackLayer(Integer.valueOf(packLayer));
String parentCode = codeE.getAttribute("parentCode");
relCodeDetail.setParentCode(StrUtil.isNotBlank(parentCode) ? parentCode : "0");
String flag = codeE.getAttribute("flag");
relCodeDetail.setFlag(Integer.valueOf(flag));
//判断是否已存在
List<RelCodeDetail> relCodeDetails = codeMap.get(StrUtil.isNotBlank(parentCode) ? parentCode : "0");
if (relCodeDetails == null) {
List<RelCodeDetail> newRelCodeDetails = new ArrayList<>();
newRelCodeDetails.add(relCodeDetail);
codeMap.put(StrUtil.isNotBlank(parentCode) ? parentCode : "0", newRelCodeDetails);
} else {
relCodeDetails.add(relCodeDetail);
codeMap.put(StrUtil.isNotBlank(parentCode) ? parentCode : "0", relCodeDetails);
}
}
}
8 months ago
//开始处理codeMap
if (!codeMap.isEmpty()) {
Map<String, Integer> batchIdFkMap = new HashMap<>();
List<RelCodeDetail> addRelCodeDetail = new ArrayList<>();
RelCodeBatch updateDrugLevelRelCodeBatch = null;
// 遍历 Map
for (Map.Entry<String, List<RelCodeDetail>> entry : codeMap.entrySet()) {
String key = entry.getKey();
List<RelCodeDetail> list = entry.getValue();
RelCodeBatch addRelCodeBatch = new RelCodeBatch();
BeanUtils.copyProperties(relCodeBatch, addRelCodeBatch);
addRelCodeBatch.setParentCode(key);
if ("0".equals(key)) {
RelCodeDetail relCodeDetail = list.get(0);
String curCode = relCodeDetail.getCurCode();
String diStr = FilterUdiUtils.getUdi(curCode).getUdi();
addRelCodeBatch.setProductCode(diStr);
addRelCodeBatch.setCurCode(curCode);
addRelCodeBatch.setThreeLevelCount(1);
this.save(addRelCodeBatch);
batchIdFkMap.put(curCode, addRelCodeBatch.getId());
updateDrugLevelRelCodeBatch = addRelCodeBatch;
} else {
for (RelCodeDetail detail : list) {
Integer packLayer = detail.getPackLayer();
if (packLayer == 2) {
RelCodeBatch addRelCodeBatch2 = new RelCodeBatch();
BeanUtils.copyProperties(relCodeBatch, addRelCodeBatch2);
addRelCodeBatch2.setParentCode(key);
String curCode = detail.getCurCode();
String diStr = FilterUdiUtils.getUdi(curCode).getUdi();
addRelCodeBatch2.setProductCode(diStr);
addRelCodeBatch2.setCurCode(curCode);
addRelCodeBatch2.setThreeLevelCount(0);
addRelCodeBatch2.setTwoLevelCount(1);
this.save(addRelCodeBatch2);
batchIdFkMap.put(curCode, addRelCodeBatch2.getId());
//同时也是上面的明细
detail.setBatchIdFk(batchIdFkMap.get(key));
addRelCodeDetail.add(detail);
} else if (packLayer == 1) {
//直接明细
detail.setBatchIdFk(batchIdFkMap.get(key));
addRelCodeDetail.add(detail);
}
}
}
}
if (CollUtil.isNotEmpty(addRelCodeDetail)) {
relCodeDetailService.saveBatch(addRelCodeDetail);
//更新层级关系的数量
this.updateDrugLevelCount(updateDrugLevelRelCodeBatch);
}
}
}
}
}
8 months ago
/**
* curCode
*
*
* @param item
*/
private void updateDrugLevelCount(RelCodeBatch item) {
String curCode = item.getCurCode();
List<RelCodeDetail> list = relCodeDetailService.list(new LambdaQueryWrapper<RelCodeDetail>().eq(RelCodeDetail::getParentCode, curCode));
if (CollUtil.isNotEmpty(list)) {
RelCodeDetail relCodeDetail = list.get(0);
Integer packLayer = relCodeDetail.getPackLayer();
if (packLayer == 2) {
item.setThreeLevelCount(1);
item.setTwoLevelCount(list.size());
//需要计算出一级数量
List<String> twoCurCodes = list.stream().map(RelCodeDetail::getCurCode).collect(Collectors.toList());
List<RelCodeDetail> list2 = relCodeDetailService.list(new LambdaQueryWrapper<RelCodeDetail>().in(RelCodeDetail::getParentCode, twoCurCodes));
item.setOneLevelCount(list2.size());
//更新下 二级单
List<RelCodeBatch> twoRelCodeBatchs = this.list(new LambdaQueryWrapper<RelCodeBatch>().in(RelCodeBatch::getCurCode, twoCurCodes));
if (CollUtil.isNotEmpty(twoRelCodeBatchs)) {
twoRelCodeBatchs.forEach(t -> {
this.updateDrugLevelCount(t);
});
8 months ago
}
} else if (packLayer == 1) {
item.setThreeLevelCount(0);
item.setTwoLevelCount(1);
item.setOneLevelCount(list.size());
8 months ago
}
this.updateById(item);
8 months ago
}
return;
8 months ago
}
}