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/basic/UdiRelevanceService.java

527 lines
21 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.basic;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.glxp.api.dao.basic.BasicProductsDao;
import com.glxp.api.dao.basic.UdiRelevanceDao;
import com.glxp.api.entity.basic.BasicProductsEntity;
import com.glxp.api.entity.basic.UdiProductEntity;
import com.glxp.api.entity.basic.UdiRelevanceEntity;
import com.glxp.api.entity.inout.IoCodeTempEntity;
import com.glxp.api.entity.thrsys.ThrSystemEntity;
import com.glxp.api.req.basic.CompanyProductRelevanceRequest;
import com.glxp.api.req.basic.FilterUdiRelRequest;
import com.glxp.api.res.basic.MainIdRelIdAndProductResponse;
import com.glxp.api.res.basic.UdiRelevanceResponse;
import com.glxp.api.res.basic.UdiRlSupResponse;
import com.glxp.api.service.thrsys.ThrSystemService;
import com.glxp.api.util.IntUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Transactional(rollbackFor = Exception.class)
public class UdiRelevanceService extends ServiceImpl<UdiRelevanceDao, UdiRelevanceEntity> {
@Resource
UdiRelevanceDao udiRelevanceDao;
@Resource
UdiRlSupService udiRlSupService;
@Resource
ThrSystemService basicThirdSysService;
public List<UdiRelevanceResponse> filterUdiRelevance(FilterUdiRelRequest filterUdiRelRequest) {
if (filterUdiRelRequest == null) {
return Collections.emptyList();
}
if (filterUdiRelRequest.getPage() != null) {
int offset = (filterUdiRelRequest.getPage() - 1) * filterUdiRelRequest.getLimit();
PageHelper.offsetPage(offset, filterUdiRelRequest.getLimit());
}
List<UdiRelevanceResponse> data = udiRelevanceDao.filterUdiRelevance(filterUdiRelRequest);
return data;
}
public List<UdiRelevanceResponse> filterCertUdi(FilterUdiRelRequest filterUdiRelRequest) {
if (filterUdiRelRequest == null) {
return Collections.emptyList();
}
if (filterUdiRelRequest.getPage() != null) {
int offset = (filterUdiRelRequest.getPage() - 1) * filterUdiRelRequest.getLimit();
PageHelper.offsetPage(offset, filterUdiRelRequest.getLimit());
}
List<UdiRelevanceResponse> data = udiRelevanceDao.filterCertUdi(filterUdiRelRequest);
return data;
}
public List<UdiRelevanceResponse> filterUdiJoinSup(FilterUdiRelRequest filterUdiRelRequest) {
if (filterUdiRelRequest == null) {
return Collections.emptyList();
}
if (filterUdiRelRequest.getPage() != null) {
int offset = (filterUdiRelRequest.getPage() - 1) * filterUdiRelRequest.getLimit();
PageHelper.offsetPage(offset, filterUdiRelRequest.getLimit());
}
List<UdiRelevanceResponse> data = udiRelevanceDao.filterUdiJoinSup(filterUdiRelRequest);
return data;
}
public List<UdiRelevanceResponse> selectAllByNameCode(String nameCode) {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setUniqueNameCode(nameCode);
List<UdiRelevanceResponse> udiRelevanceResponses = filterUdiRelevance(filterUdiRelRequest);
return udiRelevanceResponses;
}
public UdiRelevanceResponse selectByNameCode(String nameCode) {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setUniqueNameCode(nameCode);
List<UdiRelevanceResponse> udiRelevanceResponses = filterUdiRelevance(filterUdiRelRequest);
if (udiRelevanceResponses != null && udiRelevanceResponses.size() > 0)
return udiRelevanceResponses.get(0);
return null;
}
public UdiRelevanceResponse selectByRelId(String relId) {
if (StrUtil.isEmpty(relId))
return null;
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setId(Long.parseLong(relId));
UdiRelevanceResponse udiRelevanceResponses = selectOneUdi(filterUdiRelRequest);
return udiRelevanceResponses;
}
public UdiRelevanceResponse selectByLevelRelId(String relId) {
if (StrUtil.isEmpty(relId))
return null;
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setId(Long.parseLong(relId));
filterUdiRelRequest.setPackLevel("1");
UdiRelevanceResponse udiRelevanceResponses = selectOneUdi(filterUdiRelRequest);
return udiRelevanceResponses;
}
public List<UdiRelevanceResponse> selectAllByNameCode(String nameCode, String unitFk) {
List<UdiRelevanceResponse> udiRelevanceResponses;
if (StrUtil.isNotEmpty(unitFk)) {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setUniqueNameCode(nameCode);
filterUdiRelRequest.setUnitFk(unitFk);
filterUdiRelRequest.setIsDisable(false);
filterUdiRelRequest.setKey("key");
udiRelevanceResponses = filterUdiJoinSup(filterUdiRelRequest);
} else {
udiRelevanceResponses = selectGroupByNameCode(nameCode, false);
}
return udiRelevanceResponses;
}
/**
*
*/
public List<UdiRelevanceResponse> selectDrugsByNameCode(IoCodeTempEntity codeEnttity, String unitFk) {
List<UdiRelevanceResponse> udiRelevanceResponses;
if (StrUtil.isNotEmpty(unitFk)) {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setUniqueNameCode(codeEnttity.getNameCode());
filterUdiRelRequest.setUnitFk(unitFk);
filterUdiRelRequest.setIsDisable(false);
filterUdiRelRequest.setKey("key");
if (codeEnttity.getProductType() != null) {
filterUdiRelRequest.setProductsType(codeEnttity.getProductType());
}
udiRelevanceResponses = filterUdiJoinSup(filterUdiRelRequest);
} else {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setNameCode(codeEnttity.getNameCode());
filterUdiRelRequest.setIsDisable(false);
filterUdiRelRequest.setProductsType(codeEnttity.getProductType());
return udiRelevanceDao.filterUdiGp(filterUdiRelRequest);
}
return udiRelevanceResponses;
}
/**
* 根据收费项目查询产品信息
*
* @return
*/
public UdiRelevanceResponse selectByPayFeeCode(String payFeeCode) {
if (StrUtil.isEmpty(payFeeCode)) {
return null;
}
List<UdiRelevanceResponse> udiRelevanceResponses;
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setPayFeeCode(payFeeCode);
udiRelevanceResponses = filterUdiJoinSup(filterUdiRelRequest);
if (CollUtil.isNotEmpty(udiRelevanceResponses)) {
return udiRelevanceResponses.get(0);
}
return null;
}
public boolean isExit() {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setPage(1);
filterUdiRelRequest.setLimit(1);
List<UdiRelevanceResponse> data = filterUdiRelevance(filterUdiRelRequest);
if (data != null && data.size() > 0) {
return true;
}
return false;
}
public List<UdiRelevanceResponse> filterUdiGp(FilterUdiRelRequest filterUdiRelRequest) {
if (filterUdiRelRequest == null) {
return Collections.emptyList();
}
if (filterUdiRelRequest.getPage() != null) {
int offset = (filterUdiRelRequest.getPage() - 1) * filterUdiRelRequest.getLimit();
PageHelper.offsetPage(offset, filterUdiRelRequest.getLimit());
}
List<UdiRelevanceResponse> data = udiRelevanceDao.filterUdiGp(filterUdiRelRequest);
return data;
}
public List<UdiRelevanceEntity> batchSelectByUuid(List<String> uuids) {
return udiRelevanceDao.batchSelectByUuid(uuids);
}
public List<UdiRelevanceEntity> batchSelectByIds(List<String> ids) {
return udiRelevanceDao.batchSelectByIds(ids);
}
public List<UdiRelevanceEntity> selectByUuid(String uuid) {
return udiRelevanceDao.selectByUuid(uuid);
}
public UdiRelevanceEntity selectById(Long id) {
return udiRelevanceDao.selectById(id);
}
public UdiRelevanceResponse selectGroupById(Long id) {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setId(id);
filterUdiRelRequest.setDiType(1);
List<UdiRelevanceResponse> data = udiRelevanceDao.filterUdiRelevance(filterUdiRelRequest);
if (data != null && data.size() > 0)
return data.get(0);
return null;
}
public UdiRelevanceResponse selectUdiId(Long id) {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setId(id);
List<UdiRelevanceResponse> data = udiRelevanceDao.filterUdiRelevance(filterUdiRelRequest);
if (data != null && data.size() > 0)
return data.get(0);
return null;
}
public UdiRelevanceResponse selectSupGroupById(Long id, String supId) {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
if (StrUtil.isNotEmpty(supId))
filterUdiRelRequest.setUnitFk(supId);
filterUdiRelRequest.setId(id);
filterUdiRelRequest.setDiType(1);
return udiRelevanceDao.selectOneUdiJoinSup(filterUdiRelRequest);
}
public UdiRelevanceEntity selectUpdateByUuid(String uuid) {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setUuid(uuid);
List<UdiRelevanceEntity> data = udiRelevanceDao.filterEntity(filterUdiRelRequest);
if (data != null && data.size() > 0)
return data.get(0);
return null;
}
public UdiRelevanceEntity selectUpdateByThirdId(String thirdId) {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
if (thirdId != null) {
ThrSystemEntity basicThirdSysEntity = basicThirdSysService.selectMainThrSys();
String mainSys = basicThirdSysEntity.getThirdId();
if (mainSys.equals("thirdId")) {
filterUdiRelRequest.setThirdId(thirdId);
} else if (mainSys.equals("thirdId1")) {
filterUdiRelRequest.setThirdId1(thirdId);
} else if (mainSys.equals("thirdId2")) {
filterUdiRelRequest.setThirdId2(thirdId);
} else if (mainSys.equals("thirdId3")) {
filterUdiRelRequest.setThirdId3(thirdId);
} else if (mainSys.equals("thirdId4")) {
filterUdiRelRequest.setThirdId4(thirdId);
}
}
List<UdiRelevanceEntity> data = udiRelevanceDao.filterEntity(filterUdiRelRequest);
if (data != null && data.size() > 0)
return data.get(0);
return null;
}
public List<UdiRelevanceResponse> selectByMainId(String mainId) {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setMainId(mainId);
List<UdiRelevanceResponse> udiRelevanceResponses = filterUdiRelevance(filterUdiRelRequest);
return udiRelevanceResponses;
}
public UdiRelevanceEntity selectUpteaByAll(String uuid, String thirdId) {
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
if (thirdId != null) {
ThrSystemEntity basicThirdSysEntity = basicThirdSysService.selectMainThrSys();
String mainSys = basicThirdSysEntity.getThirdId();
filterUdiRelRequest.setUuid(uuid);
if (mainSys.equals("thirdId")) {
filterUdiRelRequest.setThirdId(thirdId);
} else if (mainSys.equals("thirdId1")) {
filterUdiRelRequest.setThirdId1(thirdId);
} else if (mainSys.equals("thirdId2")) {
filterUdiRelRequest.setThirdId2(thirdId);
} else if (mainSys.equals("thirdId3")) {
filterUdiRelRequest.setThirdId3(thirdId);
} else if (mainSys.equals("thirdId4")) {
filterUdiRelRequest.setThirdId4(thirdId);
}
}
List<UdiRelevanceEntity> data = udiRelevanceDao.filterEntity(filterUdiRelRequest);
if (data != null && data.size() > 0)
return data.get(0);
return null;
}
public UdiRelevanceEntity selectByThirdId(String thirdId, String thirdSys) {
if (StrUtil.isEmpty(thirdId) || StrUtil.isEmpty(thirdSys)) {
return null;
}
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
if ("thirdId".equals(thirdSys)) {
filterUdiRelRequest.setThirdId(thirdId);
} else if ("thirdId1".equals(thirdSys)) {
filterUdiRelRequest.setThirdId1(thirdId);
} else if ("thirdId2".equals(thirdSys)) {
filterUdiRelRequest.setThirdId2(thirdId);
} else if ("thirdId3".equals(thirdSys)) {
filterUdiRelRequest.setThirdId3(thirdId);
} else if ("thirdId4".equals(thirdSys)) {
filterUdiRelRequest.setThirdId4(thirdId);
}
return udiRelevanceDao.selectByThirdId(filterUdiRelRequest);
}
public List<UdiRlSupResponse> selectListByThirdId(String thirdId, String thirdSys) {
if (StrUtil.isEmpty(thirdId) || StrUtil.isEmpty(thirdSys)) {
return null;
}
CompanyProductRelevanceRequest filterUdiRelRequest = new CompanyProductRelevanceRequest();
if ("thirdId".equals(thirdSys)) {
filterUdiRelRequest.setThirdId(thirdId);
} else if ("thirdId1".equals(thirdSys)) {
filterUdiRelRequest.setThirdId1(thirdId);
} else if ("thirdId2".equals(thirdSys)) {
filterUdiRelRequest.setThirdId2(thirdId);
} else if ("thirdId3".equals(thirdSys)) {
filterUdiRelRequest.setThirdId3(thirdId);
} else if ("thirdId4".equals(thirdSys)) {
filterUdiRelRequest.setThirdId4(thirdId);
}
filterUdiRelRequest.setDiType(1);
List<UdiRlSupResponse> data = udiRlSupService.filterUdiGp(filterUdiRelRequest);
return data;
}
public UdiProductEntity getDiProduct(List<UdiProductEntity> udiInfoEntities) {
return udiInfoEntities.stream()
.filter(udiProductEntity -> IntUtil.value(udiProductEntity.getDiType()) == 1)
.findFirst()
.orElse(null);
}
public UdiRelevanceEntity insertDefaultLevel(UdiRelevanceEntity udiRelevanceEntity, UdiProductEntity udiProductEntity) {
if (udiProductEntity != null) {
udiRelevanceEntity.setDistributeLevel(1);
udiRelevanceEntity.setUseLevel(0);
}
return udiRelevanceEntity;
}
public boolean insertUdiRelevance(UdiRelevanceEntity udiRelevanceEntity) {
return udiRelevanceDao.insertUdiRelevance(udiRelevanceEntity);
}
public UdiRelevanceResponse selectByMainIdOne(String mainId) {
List<UdiRelevanceResponse> udiRelevanceResponses = selectByMainId(mainId);
if (udiRelevanceResponses != null && udiRelevanceResponses.size() > 0)
return udiRelevanceResponses.get(0);
return null;
}
public boolean updateUdiRelevance(UdiRelevanceEntity udiRelevanceEntity) {
ThrSystemEntity basicThirdSysEntity = basicThirdSysService.selectMainThrSys();
String mainSys = basicThirdSysEntity.getThirdId();
if (mainSys.equals("thirdId")) {
udiRelevanceEntity.setMainId(udiRelevanceEntity.getThirdId());
} else if (mainSys.equals("thirdId1")) {
udiRelevanceEntity.setMainId(udiRelevanceEntity.getThirdId1());
} else if (mainSys.equals("thirdId2")) {
udiRelevanceEntity.setMainId(udiRelevanceEntity.getThirdId2());
} else if (mainSys.equals("thirdId3")) {
udiRelevanceEntity.setMainId(udiRelevanceEntity.getThirdId3());
} else if (mainSys.equals("thirdId4")) {
udiRelevanceEntity.setMainId(udiRelevanceEntity.getThirdId4());
}
return udiRelevanceDao.updateUdiRelevance(udiRelevanceEntity);
}
public boolean deleteById(String id) {
return udiRelevanceDao.deleteById(id);
}
public boolean deleteByIds(List<String> ids) {
return udiRelevanceDao.deleteByIds(ids);
}
public List<UdiRelevanceResponse> selectGroupByNameCode(String nameCode, Boolean isDisable) {
// FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
// filterUdiRelRequest.setNameCode(nameCode);
// filterUdiRelRequest.setIsDisable(isDisable);
return udiRelevanceDao.selectGroupByNameCode(nameCode, isDisable);
}
public UdiRelevanceResponse selectOneUdi(FilterUdiRelRequest filterUdiRelRequest) {
return udiRelevanceDao.selectOneUdi(filterUdiRelRequest);
}
public MainIdRelIdAndProductResponse selectMainIdRelIdAndProductMap(List<String> thrCodes, String thirdSys) {
MainIdRelIdAndProductResponse mainIdRelIdAndProductResponse = new MainIdRelIdAndProductResponse();
Map<String, UdiRelevanceEntity> mainIdRelIdMap = new HashMap<>();
Map<Long, BasicProductsEntity> relIdBasicProductsEntityMap = new HashMap<>();
QueryWrapper<UdiRelevanceEntity> qw = new QueryWrapper<>();
qw.in(thirdSys, thrCodes);
qw.ne("isDisable", true);
qw.select("id", "mainId");
List<UdiRelevanceEntity> udiRelevanceEntityList = udiRelevanceDao.selectList(qw);
if (CollectionUtil.isNotEmpty(udiRelevanceEntityList)) {
mainIdRelIdMap = udiRelevanceEntityList.stream().collect(Collectors.toMap(UdiRelevanceEntity::getMainId, udiRelevanceEntity -> udiRelevanceEntity));
}
mainIdRelIdAndProductResponse.setMainIdRelIdMap(mainIdRelIdMap);
mainIdRelIdAndProductResponse.setRelIdBasicProductsEntityMap(relIdBasicProductsEntityMap);
return mainIdRelIdAndProductResponse;
}
public Integer findPurType(Long relId) {
UdiRelevanceEntity udiRelevanceEntity = udiRelevanceDao.selectOne(new QueryWrapper<UdiRelevanceEntity>().select("purType").eq("id", relId).last("limit 1"));
if (udiRelevanceEntity == null)
return 0;
return IntUtil.value(udiRelevanceEntity.getPurType());
}
@Resource
private BasicProductsDao basicProductsDao;
public List<Long> selectByCheckCode(String checkCode) {
LambdaQueryWrapper<BasicProductsEntity> exactMatchWrapper = new LambdaQueryWrapper<>();
exactMatchWrapper.eq(BasicProductsEntity::getYbbm, checkCode);
List<BasicProductsEntity> exactMatches = basicProductsDao.selectList(exactMatchWrapper);
if (exactMatches.isEmpty()) {
// 2. 如果没有完全匹配则查询前20位匹配的情况
LambdaQueryWrapper<BasicProductsEntity> prefixMatchWrapper = new LambdaQueryWrapper<>();
prefixMatchWrapper.apply("LEFT(ybbm, 20) = LEFT({0}, 20)", checkCode);
exactMatches = basicProductsDao.selectList(prefixMatchWrapper);
}
if (CollUtil.isNotEmpty(exactMatches)) {
List<Long> relIds = udiRelevanceDao.selectList(new LambdaQueryWrapper<UdiRelevanceEntity>()
.in(UdiRelevanceEntity::getUuid, exactMatches.stream().map(BasicProductsEntity::getUuid).collect(Collectors.toList()))
).stream().map(UdiRelevanceEntity::getId).collect(Collectors.toList());
return relIds;
} else {
return new ArrayList<>();
}
}
/**
* 批量查询追溯码信息
*
* @param nameCodes 追溯码列表
* @return 追溯码信息映射
*/
public Map<String, UdiRelevanceResponse> batchSelectByNameCodes(List<String> nameCodes) {
if (CollUtil.isEmpty(nameCodes)) {
return new HashMap<>();
}
Map<String, UdiRelevanceResponse> resultMap = new HashMap<>();
// 对大批量数据进行分批处理每次处理500个
int batchSize = 500;
for (int i = 0; i < nameCodes.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, nameCodes.size());
List<String> batchCodes = nameCodes.subList(i, endIndex);
// 使用IN查询一次性获取多个码的信息
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setNameCodes(batchCodes);
List<UdiRelevanceResponse> batchResponses = udiRelevanceDao.batchSelectByNameCodes(filterUdiRelRequest);
if (CollUtil.isNotEmpty(batchResponses)) {
for (UdiRelevanceResponse response : batchResponses) {
if (response != null && StrUtil.isNotEmpty(response.getNameCode())) {
resultMap.put(response.getNameCode(), response);
}
}
}
}
return resultMap;
}
}