package com.qianwen.smartman.modules.cps.service.impl;
|
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
import java.util.stream.Collectors;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.qianwen.core.excel.util.ExcelUtil;
|
import com.qianwen.core.log.exception.ServiceException;
|
import com.qianwen.core.mp.service.impl.BladeServiceImpl;
|
import com.qianwen.core.mp.support.Condition;
|
import com.qianwen.core.mp.support.Query;
|
import com.qianwen.core.oss.model.BladeFile;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.smartman.common.constant.CommonConstant;
|
import com.qianwen.smartman.common.constant.ExcelConstant;
|
import com.qianwen.smartman.common.enums.StatusType;
|
import com.qianwen.smartman.common.utils.MessageUtils;
|
import com.qianwen.smartman.common.utils.ValidatorUtils;
|
import com.qianwen.smartman.modules.cps.convert.ProcessConvert;
|
import com.qianwen.smartman.modules.cps.entity.Process;
|
import com.qianwen.smartman.modules.cps.entity.ProcessAssociation;
|
import com.qianwen.smartman.modules.cps.enums.WorkTypeEnum;
|
import com.qianwen.smartman.modules.cps.excel.ProcessExcel;
|
import com.qianwen.smartman.modules.cps.excel.ProcessImport;
|
import com.qianwen.smartman.modules.cps.mapper.ProcessMapper;
|
import com.qianwen.smartman.modules.cps.service.IProcessAssociationService;
|
import com.qianwen.smartman.modules.cps.service.IProcessService;
|
import com.qianwen.smartman.modules.cps.utils.ThrowFun;
|
import com.qianwen.smartman.modules.cps.vo.ProcessDetailVO;
|
import com.qianwen.smartman.modules.cps.vo.ProcessSaveVO;
|
import com.qianwen.smartman.modules.cps.vo.ProcessVO;
|
import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder;
|
import com.qianwen.smartman.modules.system.entity.Dict;
|
import com.qianwen.smartman.modules.system.service.ICodeGeneratorService;
|
import com.qianwen.smartman.modules.system.service.IDictService;
|
import com.qianwen.smartman.modules.tpm.enums.MetaTypeEnum;
|
|
@Service
|
public class ProcessServiceImpl extends BladeServiceImpl<ProcessMapper, Process> implements IProcessService {
|
private static final Logger log = LoggerFactory.getLogger(ProcessServiceImpl.class);
|
private final IProcessAssociationService processAssociationService;
|
private final OssBuilder ossBuilder;
|
private final ProcessMapper processMapper;
|
private final IDictService dictService;
|
private final ICodeGeneratorService codeGeneratorService;
|
|
|
public ProcessServiceImpl(final IProcessAssociationService processAssociationService, final OssBuilder ossBuilder, final ProcessMapper processMapper, final IDictService dictService, final ICodeGeneratorService codeGeneratorService) {
|
this.processAssociationService = processAssociationService;
|
this.ossBuilder = ossBuilder;
|
this.processMapper = processMapper;
|
this.dictService = dictService;
|
this.codeGeneratorService = codeGeneratorService;
|
}
|
|
@Override // org.springblade.modules.cps.service.IProcessService
|
public IPage<ProcessVO> listPage(Query query, String keyword, Integer status) {
|
IPage<ProcessVO> page = Condition.getPage(query);
|
page.setRecords(ProcessConvert.INSTANCE.convertDTO2ListPage(this.processMapper.listPage(page, keyword, status)));
|
return page;
|
}
|
|
@Override // org.springblade.modules.cps.service.IProcessService
|
@Transactional(rollbackFor = {Exception.class})
|
public ProcessDetailVO insert(ProcessSaveVO vo) {
|
if (Func.isBlank(vo.getCode())) {
|
String code = this.codeGeneratorService.getGeneratorCode(vo, MetaTypeEnum.PROCESS.getCode());
|
log.info("工序编码规则生成的code:{}", code + " ," + code.length());
|
vo.setCode(code);
|
}
|
checkProcess(vo);
|
Process process = ProcessConvert.INSTANCE.convert(vo);
|
Long id = vo.getId();
|
if (Func.isNull(id)) {
|
save(process);
|
} else {
|
Process p = (Process) getById(vo.getId());
|
Integer type = vo.getType();
|
if (!p.getType().equals(type)) {
|
throw new ServiceException(MessageUtils.message("cps.process.type.not.change", new Object[0]));
|
}
|
updateById(process);
|
}
|
return ProcessConvert.INSTANCE.convertDetail(process);
|
}
|
|
@Override // org.springblade.modules.cps.service.IProcessService
|
public ProcessDetailVO getDetail(Long processId) {
|
ProcessDetailVO processDetailVO = this.processMapper.selectByIdWithType(processId);
|
return processDetailVO;
|
}
|
|
@Override // org.springblade.modules.cps.service.IProcessService
|
@Transactional(rollbackFor = {Exception.class})
|
public Boolean delete(List<Long> processIds, Integer type) {
|
if (StatusType.REMOVE.getType().equals(type)) {
|
int count = this.baseMapper.existCraftProcess(processIds);
|
ThrowFun.isTrue(count > 0).throwMessage(MessageUtils.message("cps.process.binding.craft", new Object[0]));
|
|
this.processAssociationService.remove(Wrappers.<ProcessAssociation>query().lambda().in(Func.isNotEmpty(processIds), ProcessAssociation::getProcessId, processIds));
|
/*
|
this.processAssociationService.remove(Wrappers.query().lambda().in(Func.isNotEmpty(processIds), (v0) -> {
|
return v0.getProcessId();
|
}, processIds));
|
*/
|
remove(Wrappers.<Process>query().lambda().in(Func.isNotEmpty(processIds), Process::getId, processIds));
|
return true;
|
}
|
return Boolean.valueOf(changeStatus(processIds, CommonConstant.DEACTIVATE));
|
}
|
|
@Override // org.springblade.modules.cps.service.IProcessService
|
@Transactional(rollbackFor = {Exception.class})
|
public BladeFile importProcess(List<ProcessImport> data) {
|
if (Func.isEmpty(data)) {
|
throw new ServiceException(MessageUtils.message("excel.import.data.can.not.be.null", new Object[0]));
|
}
|
if (data.size() > 200) {
|
throw new ServiceException(MessageUtils.message("excel.import.size.failed", new Object[0]));
|
}
|
HashMap<String, Object> codeMap = new HashMap<>(16);
|
List<Process> processList = list();
|
if (Func.isNotEmpty(processList)) {
|
processList.forEach(x -> {
|
if (CommonConstant.ENABLE.equals(x.getStatus())) {
|
codeMap.put(x.getCode(), null);
|
}
|
});
|
}
|
Set<String> codeDisableSet = processList.stream().filter(c -> {
|
return CommonConstant.DEACTIVATE.equals(c.getStatus());
|
}).map((v0) -> {
|
return v0.getCode();
|
}).collect(Collectors.toSet());
|
|
Map<String, String> dictMap = new HashMap<>(16);
|
List<Dict> dictList = this.dictService.list(Wrappers.<Dict>lambdaQuery().select(Dict::getDictKey, Dict::getDictValue).eq(Dict::getCode, "work_type"));
|
/*
|
List<Dict> dictList = this.dictService.list((Wrapper) Wrappers.lambdaQuery().select(new SFunction[]{(v0) -> {
|
return v0.getDictKey();
|
}, (v0) -> {
|
return v0.getDictValue();
|
}}).eq((v0) -> {
|
return v0.getCode();
|
}, "work_type"));*/
|
if (Func.isNotEmpty(dictList)) {
|
dictMap = dictList.stream().collect(Collectors.toMap((v0) -> {
|
return v0.getDictValue();
|
}, (v0) -> {
|
return v0.getDictKey();
|
}));
|
}
|
boolean flag = Boolean.TRUE.booleanValue();
|
for (ProcessImport datum : data) {
|
checkImportProcess(datum, codeMap, codeDisableSet, dictMap);
|
if (Func.isNotEmpty(datum.getFailReason())) {
|
flag = Boolean.FALSE.booleanValue();
|
}
|
}
|
if (!flag) {
|
MultipartFile multipartFile = ExcelUtil.exportFillTemplateToMultipartFile(ExcelConstant.DIRECTORY + "processFailTemplate" + ExcelConstant.SUFFIX, MessageUtils.message("excel.import.failed.report.name", new Object[0]) + ExcelConstant.SUFFIX, "工序信息表", data.stream().filter(x2 -> {
|
return Func.isNotEmpty(x2.getFailReason());
|
}).collect(Collectors.toList()), null, null);
|
return this.ossBuilder.tempTemplate().putFile(multipartFile.getOriginalFilename(), multipartFile);
|
}
|
data.forEach(x3 -> {
|
Process process = ProcessConvert.INSTANCE.convert(x3);
|
process.setIsImport(1);
|
saveOrUpdate(process);
|
});
|
return null;
|
}
|
|
@Override // org.springblade.modules.cps.service.IProcessService
|
public List<ProcessExcel> listProcessExcel(String keyword, Integer status) {
|
return this.baseMapper.listProcessExcel(keyword, status);
|
}
|
|
private void checkProcess(ProcessSaveVO processSaveVO) {
|
long count = count(Wrappers.<Process>lambdaQuery()
|
.ne(Func.isNotEmpty(processSaveVO.getId()), Process::getId, processSaveVO.getId())
|
.eq(Process::getCode, processSaveVO.getCode())
|
.eq(Process::getStatus, CommonConstant.ENABLE));
|
|
/*
|
long count = count((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().ne(Func.isNotEmpty(processSaveVO.getId()), (v0) -> {
|
return v0.getId();
|
}, processSaveVO.getId()).eq((v0) -> {
|
return v0.getCode();
|
}, processSaveVO.getCode())).eq((v0) -> {
|
return v0.getStatus();
|
}, CommonConstant.ENABLE));
|
*/
|
if (count > 0) {
|
throw new ServiceException(MessageUtils.message("cps.process.code.already.exists", new Object[0]));
|
}
|
long countDisable = count(Wrappers.<Process>lambdaQuery()
|
.ne(Func.isNotEmpty(processSaveVO.getId()), Process::getId, processSaveVO.getId())
|
.eq(Process::getCode, processSaveVO.getCode())
|
.eq(Process::getStatus, CommonConstant.ENABLE));
|
/*
|
long countDisable = count((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().ne(Func.isNotEmpty(processSaveVO.getId()), (v0) -> {
|
return v0.getId();
|
}, processSaveVO.getId()).eq((v0) -> {
|
return v0.getCode();
|
}, processSaveVO.getCode())).eq((v0) -> {
|
return v0.getStatus();
|
}, CommonConstant.ENABLE));*/
|
if (countDisable > 0) {
|
throw new ServiceException(MessageUtils.message("cps.process.code.disable.already.exists", new Object[0]));
|
}
|
if (WorkTypeEnum.HANDLE.getCode().equals(processSaveVO.getType())) {
|
throw new ServiceException(MessageUtils.message("cps.process.type.can.not.handle", new Object[0]));
|
}
|
}
|
|
private void checkImport(List<Long> ids) {
|
Long count = Long.valueOf(count(Wrappers.<Process>query().lambda().in(Func.isNotEmpty(ids), Process::getId, ids).eq(Process::getIsImport, 1)));
|
|
if (count.longValue() > 0) {
|
throw new ServiceException(MessageUtils.message("cps.process.delete.failed", new Object[0]));
|
}
|
}
|
|
private void checkImportProcess(ProcessImport processImport, HashMap<String, Object> codeMap, Set<String> codeDisableSet, Map<String, String> dictMap) {
|
if (Func.isEmpty(processImport.getCode())) {
|
processImport.setFailReason(MessageUtils.message("cps.process.code.can.not.be.null", new Object[0]));
|
} else if (codeMap.containsKey(processImport.getCode())) {
|
processImport.setFailReason(MessageUtils.message("cps.process.code.already.exists", new Object[0]));
|
} else if (codeDisableSet.contains(processImport.getCode())) {
|
processImport.setFailReason(MessageUtils.message("cps.process.code.disable.already.exists", new Object[0]));
|
} else if (ValidatorUtils.checkContextLength(processImport.getCode())) {
|
processImport.setFailReason(MessageUtils.message("cps.process.column.code.can.not.exceed", new Object[0]));
|
} else {
|
codeMap.put(processImport.getCode(), null);
|
if (Func.isEmpty(processImport.getName())) {
|
processImport.setFailReason(MessageUtils.message("cps.process.name.can.not.be.null", new Object[0]));
|
} else if (ValidatorUtils.checkContextLength(processImport.getName())) {
|
processImport.setFailReason(MessageUtils.message("cps.process.column.name.can.not.exceed", new Object[0]));
|
} else if (Func.isNotEmpty(processImport.getTypeName()) && ValidatorUtils.checkContextLength(processImport.getTypeName())) {
|
processImport.setFailReason(MessageUtils.message("cps.process.column.type.can.not.exceed", new Object[0]));
|
} else if (Func.isNotEmpty(processImport.getDescription()) && ValidatorUtils.checkContextLength(processImport.getDescription())) {
|
processImport.setFailReason(MessageUtils.message("cps.process.column.description.can.not.exceed", new Object[0]));
|
} else if (Func.isNotEmpty(processImport.getTypeName()) && !dictMap.containsKey(processImport.getTypeName())) {
|
processImport.setFailReason(MessageUtils.message("cps.process.column.type.not.exist", new Object[0]));
|
} else if (Func.isNotEmpty(processImport.getTypeName())) {
|
processImport.setType(Integer.valueOf(dictMap.get(processImport.getTypeName())));
|
}
|
}
|
}
|
}
|