package cn.cslg.pas.service;
import cn.cslg.pas.common.core.base.Constants;
import cn.cslg.pas.domain.PatentClassNumberLink;
import cn.cslg.pas.common.model.params.PatentClassNumberParams;
import cn.cslg.pas.common.utils.StringUtils;
import cn.cslg.pas.mapper.PatentClassNumberLinkMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 分类号关联表 服务类
*
*
* @author 王岩
* @since 2022-02-24
*/
@Service
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
public class PatentClassNumberLinkService extends ServiceImpl {
private final PatentClassNumberService patentClassNumberService;
private final PatentService patentService;
public PatentClassNumberLink getPatentClassNumberLinkByPatentIdAndTypeAndMain(Integer patentId, Integer type, Integer main) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PatentClassNumberLink::getPatentId, patentId);
queryWrapper.eq(PatentClassNumberLink::getType, type);
queryWrapper.eq(PatentClassNumberLink::getMain, main);
return this.getOne(queryWrapper);
}
public List getPatentClassNumberLinkByPatentIds(List patentIds) {
if (patentIds == null || patentIds.size() == 0) {
return new ArrayList<>();
}
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(PatentClassNumberLink::getPatentId, patentIds);
return this.list(queryWrapper);
}
public void importPatentClassNumberLink(Integer localPatentId, Integer importPatentId, List importPatentClassNumberLinkList) {
this.deleteByPatentId(localPatentId);
List patentClassNumberLinkList = importPatentClassNumberLinkList.stream().filter(item -> item.getPatentId().equals(importPatentId)).collect(Collectors.toList());
for (PatentClassNumberLink patentClassNumberLink : patentClassNumberLinkList) {
patentClassNumberLink.setPatentId(localPatentId);
patentClassNumberLink.setId(null);
}
this.saveOrUpdateBatch(patentClassNumberLinkList);
}
public void updatePatentClassNumberLink(PatentClassNumberParams params) {
if (params.getIpcList() != null && params.getIpcList().size() != 0) {
this.updateData(params.getPatentId(), params.getIpcList(), Constants.PATENT_CLASS_NUMBER_IPC);
}
if (params.getCpcList() != null && params.getCpcList().size() != 0) {
this.updateData(params.getPatentId(), params.getCpcList(), Constants.PATENT_CLASS_NUMBER_CPC);
}
if (params.getUpcList() != null && params.getUpcList().size() != 0) {
this.updateData(params.getPatentId(), params.getUpcList(), Constants.PATENT_CLASS_NUMBER_UPC);
}
if (params.getLocList() != null && params.getLocList().size() != 0) {
this.updateData(params.getPatentId(), params.getLocList(), Constants.PATENT_CLASS_NUMBER_LOC);
}
if (StringUtils.isNotEmpty(params.getMainIpc())) {
this.updateMain(params.getPatentId(), Constants.PATENT_CLASS_NUMBER_IPC, params.getMainIpc());
}
if (StringUtils.isNotEmpty(params.getMainUpc())) {
this.updateMain(params.getPatentId(), Constants.PATENT_CLASS_NUMBER_UPC, params.getMainUpc());
}
}
public void updateMain(Integer patentId, Integer type, String code) {
this.remove(Wrappers.lambdaQuery().eq(PatentClassNumberLink::getPatentId, patentId).eq(PatentClassNumberLink::getType, type).eq(PatentClassNumberLink::getCode, code));
PatentClassNumberLink patentClassNumberLink = new PatentClassNumberLink();
patentClassNumberLink.setCode(code);
patentClassNumberLink.setPatentId(patentId);
patentClassNumberLink.setType(type);
patentClassNumberLink.setMain(1);
patentClassNumberLink.insert();
}
public void updateData(Integer patentId, List classNumber, Integer type) {
this.deleteByPatentIdAndType(patentId, type, 0);
List patentClassNumberLinkList = new ArrayList<>();
for (String code : classNumber.stream().distinct().collect(Collectors.toList())) {
PatentClassNumberLink patentClassNumberLink = new PatentClassNumberLink();
patentClassNumberLink.setPatentId(patentId);
patentClassNumberLink.setType(type);
patentClassNumberLink.setCode(code);
patentClassNumberLink.setMain(0);
patentClassNumberLinkList.add(patentClassNumberLink);
}
this.saveOrUpdateBatch(patentClassNumberLinkList);
}
public void deleteByPatentIdAndType(Integer patentId, Integer type, Integer main) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
if (main != null) {
queryWrapper.eq(PatentClassNumberLink::getMain, main);
}
queryWrapper.eq(PatentClassNumberLink::getType, type);
queryWrapper.eq(PatentClassNumberLink::getPatentId, patentId);
this.remove(queryWrapper);
}
public void deleteByPatentId(Integer patentId) {
this.remove(Wrappers.lambdaQuery().eq(PatentClassNumberLink::getPatentId, patentId));
}
}