package com.qianwen.smartman.modules.tool.service.impl; import java.io.File; import java.io.OutputStream; import java.lang.reflect.Field; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.IndexedColors; 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 org.springframework.web.multipart.commons.CommonsMultipartFile; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.common.collect.Lists; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.mp.base.BaseServiceImpl; 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.secure.utils.AuthUtil; import com.qianwen.core.tool.node.ForestNodeMerger; import com.qianwen.core.tool.utils.DateUtil; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.common.utils.Lambda; import com.qianwen.smartman.common.utils.MessageUtils; import com.qianwen.smartman.modules.cps.entity.Employee; import com.qianwen.smartman.modules.cps.entity.Workstation; import com.qianwen.smartman.modules.cps.service.IEmployeeService; import com.qianwen.smartman.modules.cps.service.IWorkstationService; import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder; import com.qianwen.smartman.modules.system.entity.BasCodeRule; import com.qianwen.smartman.modules.system.service.IBasCoderuleService; import com.qianwen.smartman.modules.system.service.ICodeGeneratorService; import com.qianwen.smartman.modules.tool.convert.ToolManageConvert; import com.qianwen.smartman.modules.tool.entity.Tool; import com.qianwen.smartman.modules.tool.entity.ToolCategory; import com.qianwen.smartman.modules.tool.entity.ToolModel; import com.qianwen.smartman.modules.tool.entity.ToolParameter; import com.qianwen.smartman.modules.tool.enums.ToolLifeCountMethodEnum; import com.qianwen.smartman.modules.tool.enums.ToolLifeStateEnum; import com.qianwen.smartman.modules.tool.enums.ToolUseStateEnum; import com.qianwen.smartman.modules.tool.excel.ToolManageExcel; import com.qianwen.smartman.modules.tool.interceptor.CustomCellWriteHandler; import com.qianwen.smartman.modules.tool.mapper.ToolManageMapper; import com.qianwen.smartman.modules.tool.service.IToolCategoryService; import com.qianwen.smartman.modules.tool.service.IToolChangeRecordService; import com.qianwen.smartman.modules.tool.service.IToolManageService; import com.qianwen.smartman.modules.tool.service.IToolModelService; import com.qianwen.smartman.modules.tool.service.IToolParameterService; import com.qianwen.smartman.modules.tool.vo.ToolDischargeVO; import com.qianwen.smartman.modules.tool.vo.ToolManageEquipmentVO; import com.qianwen.smartman.modules.tool.vo.ToolManageSaveVO; import com.qianwen.smartman.modules.tool.vo.ToolManageTreeVO; import com.qianwen.smartman.modules.tool.vo.ToolManageUpdateVO; import com.qianwen.smartman.modules.tool.vo.ToolManageVO; import com.qianwen.smartman.modules.tool.vo.ToolQueryVO; import com.qianwen.smartman.modules.tpm.enums.MetaTypeEnum; @Service /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/tool/service/impl/ToolManageServiceImpl.class */ public class ToolManageServiceImpl extends BaseServiceImpl implements IToolManageService { private static final Logger log = LoggerFactory.getLogger(ToolManageServiceImpl.class); private final IToolCategoryService toolCategoryService; private final IToolModelService toolModelService; private final IWorkstationService workstationService; private final IToolChangeRecordService toolChangeRecordService; private final IEmployeeService employeeService; private final ICodeGeneratorService codeGeneratorService; private final IBasCoderuleService basCoderuleService; private final OssBuilder ossBuilder; private final IToolParameterService toolParameterService; private static final String TOOL_EXCEL_NAME = "刀具状态报表"; public ToolManageServiceImpl(final IToolCategoryService toolCategoryService, final IToolModelService toolModelService, final IWorkstationService workstationService, final IToolChangeRecordService toolChangeRecordService, final IEmployeeService employeeService, final ICodeGeneratorService codeGeneratorService, final IBasCoderuleService basCoderuleService, final OssBuilder ossBuilder, final IToolParameterService toolParameterService) { this.toolCategoryService = toolCategoryService; this.toolModelService = toolModelService; this.workstationService = workstationService; this.toolChangeRecordService = toolChangeRecordService; this.employeeService = employeeService; this.codeGeneratorService = codeGeneratorService; this.basCoderuleService = basCoderuleService; this.ossBuilder = ossBuilder; this.toolParameterService = toolParameterService; } @Override // org.springblade.modules.tool.service.IToolManageService public Boolean saveTool(ToolManageSaveVO toolManageSaveVO) { Set toolManageCodeSet = list().stream().map((v0) -> { return v0.getCode(); }).collect(Collectors.toSet()); ToolModel toolModel = this.toolModelService.getOne(Lambda.eq((v0) -> { return v0.getId(); }, toolManageSaveVO.getToolModelId())); Tool toolManage = ToolManageConvert.INSTANCE.saveVOToConvert(toolManageSaveVO); toolManage.setToolPrefixCode(toolModel.getToolPrefixCode()); toolManage.setUseState(ToolUseStateEnum.ADD.getCode()); if (Func.isNotEmpty(toolManage.getCode()) && toolManageCodeSet.contains(toolManage.getCode())) { throw new ServiceException(MessageUtils.message("tool.tool.code.is.exist", new Object[0])); } if (Func.isEmpty(toolManageSaveVO.getCode())) { toolManageSaveVO.setToolCategory(String.valueOf(toolModel.getToolCategoryId())); do { toolManage.setCode(this.codeGeneratorService.getGeneratorCode(toolManageSaveVO, MetaTypeEnum.TOOL_MANAGE.getCode())); } while (toolManageCodeSet.contains(toolManage.getCode())); return Boolean.valueOf(save(toolManage)); } return Boolean.valueOf(save(toolManage)); } @Override // org.springblade.modules.tool.service.IToolManageService public Boolean updateTool(ToolManageUpdateVO toolManageUpdateVO) { Tool toolManage = ToolManageConvert.INSTANCE.updateToConvert(toolManageUpdateVO); return Boolean.valueOf(updateById(toolManage)); } @Override // org.springblade.modules.tool.service.IToolManageService public IPage pageTool(ToolQueryVO toolQueryVO, Query query) { return ((ToolManageMapper) this.baseMapper).page(Condition.getPage(query), toolQueryVO); } @Override // org.springblade.modules.tool.service.IToolManageService public Boolean removeTool(List ids) { List toolManageList = list(Lambda.in((v0) -> { return v0.getId(); }, ids)); Set toolUseStateSet = (Set) toolManageList.stream().map((v0) -> { return v0.getUseState(); }).collect(Collectors.toSet()); if (toolUseStateSet.contains(ToolUseStateEnum.EQUIP.getCode())) { throw new ServiceException(MessageUtils.message("tool.tool.of.equip.dont.remove", new Object[0])); } return Boolean.valueOf(remove(Lambda.in((v0) -> { return v0.getId(); }, ids))); } @Override // org.springblade.modules.tool.service.IToolManageService @Transactional(rollbackFor = {Exception.class}) public List dischargeTool(ToolDischargeVO toolDischargeVO) { List toolList = list(Lambda.in(Tool::getId, toolDischargeVO.getIds()).eq(Tool::getUseState, ToolUseStateEnum.DISCHARGE.getCode())); /* List toolList = list((Wrapper) Lambda.in((v0) -> { return v0.getId(); }, toolDischargeVO.getIds()).eq((v0) -> { return v0.getUseState(); }, ToolUseStateEnum.DISCHARGE.getCode()));*/ if (Func.isNotEmpty(toolList)) { throw new ServiceException(MessageUtils.message("tool.tool.is.already.discharge", new Object[0])); } List toolManageList = listByIds(toolDischargeVO.getIds()); toolManageList.forEach(item -> { item.setUseState(ToolUseStateEnum.DISCHARGE.getCode()); }); this.toolChangeRecordService.dischargeToolChangeRecord(toolManageList, toolDischargeVO.getEmployeeId()); update(Wrappers.lambdaUpdate().in(Tool::getId, toolDischargeVO.getIds()) .set(Tool::getWorkstationId, null) .set(Tool::getWorkstationCode, null) .set(Tool::getWorkstationName, null) .set(Tool::getToolPosition, null) .set(Tool::getUseState, ToolUseStateEnum.DISCHARGE.getCode())); /* update((Wrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) Wrappers.lambdaUpdate().in((v0) -> { return v0.getId(); }, toolDischargeVO.getIds())).set((v0) -> { return v0.getWorkstationId(); }, (Object) null)).set((v0) -> { return v0.getWorkstationCode(); }, (Object) null)).set((v0) -> { return v0.getWorkstationName(); }, (Object) null)).set((v0) -> { return v0.getToolPosition(); }, (Object) null)).set((v0) -> { return v0.getUseState(); }, ToolUseStateEnum.DISCHARGE.getCode()));*/ return ToolManageConvert.INSTANCE.convert(toolManageList); } @Override // org.springblade.modules.tool.service.IToolManageService @Transactional(rollbackFor = {Exception.class}) public ToolManageVO equipmentTool(ToolManageEquipmentVO toolManageEquipmentVO) { Tool tool = getOne(Lambda.eq(Tool::getWorkstationId, toolManageEquipmentVO.getWorkstationId()).eq(Tool::getToolPosition, toolManageEquipmentVO.getToolPosition())); if (Func.isNotEmpty(tool)) { throw new ServiceException(MessageUtils.message("tool.tool.position.exist.tool", new Object[0])); } Workstation workstation = (Workstation) this.workstationService.getById(toolManageEquipmentVO.getWorkstationId()); update(Wrappers.lambdaUpdate() .eq(Tool::getId, toolManageEquipmentVO.getId()) .set(Tool::getWorkstationId, workstation.getId()) .set(Tool::getWorkstationName, workstation.getName()) .set(Tool::getWorkstationCode, workstation.getCode()) .set(Tool::getToolPosition, toolManageEquipmentVO.getToolPosition()) .set(Tool::getUseState, ToolUseStateEnum.EQUIP.getCode())); /* update((Wrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) Wrappers.lambdaUpdate().eq((v0) -> { return v0.getId(); }, toolManageEquipmentVO.getId())).set((v0) -> { return v0.getWorkstationId(); }, workstation.getId())).set((v0) -> { return v0.getWorkstationName(); }, workstation.getName())).set((v0) -> { return v0.getWorkstationCode(); }, workstation.getCode())).set((v0) -> { return v0.getToolPosition(); }, toolManageEquipmentVO.getToolPosition())).set((v0) -> { return v0.getUseState(); }, ToolUseStateEnum.EQUIP.getCode())); */ Tool toolManage = (Tool) getById(toolManageEquipmentVO.getId()); this.toolChangeRecordService.equipmentToolChangeRecord(toolManage, toolManageEquipmentVO.getEmployeeId()); return ToolManageConvert.INSTANCE.convert(toolManage); } @Override // org.springblade.modules.tool.service.IToolManageService @Transactional(rollbackFor = {Exception.class}) public Boolean resetTool(Long id) { Tool toolManage = (Tool) getById(id); toolManage.setUsedLife(0); toolManage.setRemainLife(toolManage.getInitialLife()); boolean flag = update(Wrappers.lambdaUpdate() .eq(Tool::getId, id) .set(Tool::getUsedLife, 0) .set(Tool::getRemainLife, toolManage.getInitialLife()) .set(Tool::getToolPosition, null) .set(Tool::getLifeState, ToolLifeStateEnum.NORMAL.getCode())); /* boolean flag = update((Wrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) Wrappers.lambdaUpdate().eq((v0) -> { return v0.getId(); }, id)).set((v0) -> { return v0.getUsedLife(); }, 0)).set((v0) -> { return v0.getRemainLife(); }, toolManage.getInitialLife())).set((v0) -> { return v0.getToolPosition(); }, (Object) null)).set((v0) -> { return v0.getLifeState(); }, ToolLifeStateEnum.NORMAL.getCode())); */ if (Func.isEmpty(toolManage.getWorkstationId())) { return Boolean.valueOf(flag); } List ids = new ArrayList<>(); ids.add(id); Employee employee = (Employee) this.employeeService.getOne(Lambda.eq((v0) -> { return v0.getUserId(); }, AuthUtil.getUserId())); if (Func.isEmpty(employee)) { throw new ServiceException(MessageUtils.message("sys.outer.user.not.bind.employee", new Object[0])); } dischargeTool(new ToolDischargeVO(ids, employee.getId())); return true; } @Override // org.springblade.modules.tool.service.IToolManageService public BladeFile exportToolManage(ToolQueryVO toolQueryVO) throws Exception { List toolManageVOList = pageTool(toolQueryVO, new Query().setSize(-1)).getRecords(); List toolManageList = ToolManageConvert.INSTANCE.convertVO(toolManageVOList); List toolManageExcels = new ArrayList<>(); for (int i = 0; i < toolManageList.size(); i++) { ToolManageExcel toolManageExcel = ToolManageConvert.INSTANCE.convertToExcel(toolManageList.get(i)); toolManageExcel.setUseState(Func.isNotEmpty(toolManageList.get(i).getUseState()) ? ToolUseStateEnum.findByCode(toolManageList.get(i).getUseState()).getDesc() : null); toolManageExcel.setLifeCountMethod(Func.isNotEmpty(toolManageList.get(i).getLifeCountMethod()) ? ToolLifeCountMethodEnum.findByCode(toolManageList.get(i).getLifeCountMethod()).getDesc() : null); toolManageExcel.setLifeState(Func.isNotEmpty(toolManageList.get(i).getLifeState()) ? ToolLifeStateEnum.findByCode(toolManageList.get(i).getLifeState()).getDesc() : null); toolManageExcels.add(toolManageExcel); } String fileName = String.format("%s-%s.xlsx", "刀具监控", DateUtil.time()); MultipartFile multipartFile = toolManageExcelExport(fileName, TOOL_EXCEL_NAME, toolManageExcels, toolManageList, ToolManageExcel.class); return this.ossBuilder.tempTemplate().putFile(multipartFile.getOriginalFilename(), multipartFile); } @Override // org.springblade.modules.tool.service.IToolManageService public Boolean isExistCodeRule(String ruleFieldDictKey) { return Boolean.valueOf((this.basCoderuleService.count(Wrappers.lambdaQuery().eq(BasCodeRule::getRuleFieldDictKey, ruleFieldDictKey)) > 0L)); /* return Boolean.valueOf(this.basCoderuleService.count((Wrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getRuleFieldDictKey(); }, ruleFieldDictKey)) > 0);*/ } @Override // org.springblade.modules.tool.service.IToolManageService public List tree() { List list = Lists.newArrayList(); List toolCategoryList = this.toolCategoryService.list(); toolCategoryList.forEach(x -> { ToolManageTreeVO toolManageTreeVO = ToolManageConvert.INSTANCE.convert(x); toolManageTreeVO.setIsGroup(Boolean.TRUE); list.add(toolManageTreeVO); }); List toolModelList = this.toolModelService.list(); toolModelList.forEach(x2 -> { ToolManageTreeVO toolManageTreeVO = ToolManageConvert.INSTANCE.convert(x2); toolManageTreeVO.setIsGroup(Boolean.TRUE); list.add(toolManageTreeVO); }); List toolList = ((ToolManageMapper) this.baseMapper).getToolTreeList(); list.addAll(toolList); return ForestNodeMerger.merge(list); } public MultipartFile toolManageExcelExport(String excelFileName, String sheetName, List toolManageExcels, List toolManageList, Class clazz) throws Exception { String fileName = new String(excelFileName.getBytes(), StandardCharsets.UTF_8); DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); FileItem fileItem = factory.createItem("excel", "application/vnd.ms-excel", true, fileName); OutputStream os = fileItem.getOutputStream(); WriteCellStyle contentWriteCellStyleWarn = new WriteCellStyle(); contentWriteCellStyleWarn.setFillPatternType(FillPatternType.SOLID_FOREGROUND); contentWriteCellStyleWarn.setFillForegroundColor(Short.valueOf(IndexedColors.YELLOW.getIndex())); WriteCellStyle contentWriteCellStyleNormal = new WriteCellStyle(); WriteCellStyle contentWriteCellStyleCallThePolice = new WriteCellStyle(); contentWriteCellStyleCallThePolice.setFillPatternType(FillPatternType.SOLID_FOREGROUND); contentWriteCellStyleCallThePolice.setFillForegroundColor(Short.valueOf(IndexedColors.RED.getIndex())); List preList = new ArrayList<>(); toolManageExcels.forEach(toolManageExcel -> { if (Objects.equals(toolManageExcel.getLifeState(), ToolLifeStateEnum.WARN.getDesc())) { preList.add(contentWriteCellStyleWarn); } else if (Objects.equals(toolManageExcel.getLifeState(), ToolLifeStateEnum.CALL_THE_POLICE.getDesc())) { preList.add(contentWriteCellStyleCallThePolice); } else { preList.add(contentWriteCellStyleNormal); } }); WriteCellStyle headWriteCellStyle = new WriteCellStyle(); HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, preList); EasyExcel.write(os).head(getHead()).registerWriteHandler(horizontalCellStyleStrategy).registerWriteHandler(new CustomCellWriteHandler()).sheet(sheetName).doWrite(getData(toolManageList)); return new CommonsMultipartFile(fileItem); } public List> getHead() { List> list = new ArrayList<>(); ToolManageExcel toolManageExcel = new ToolManageExcel(); Field[] fields = toolManageExcel.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); ExcelProperty annotation = field.getAnnotation(ExcelProperty.class); if (Func.isNotEmpty(annotation)) { List head = new ArrayList<>(3); head.add(annotation.value()[0]); head.add(annotation.value()[1]); head.add(annotation.value()[2]); list.add(head); } } List toolParameterList = this.toolParameterService.list(Wrappers.lambdaQuery().orderByAsc(ToolParameter::getToolParameterCode)); /* List toolParameterList = this.toolParameterService.list((Wrapper) Wrappers.lambdaQuery().orderByAsc((v0) -> { return v0.getToolParameterCode(); }));*/ List toolParameterNameList = toolParameterList.stream().map((v0) -> { return v0.getToolParameterName(); }).collect(Collectors.toList()); Map nameUnitMap = toolParameterList.stream().filter(item -> { return Func.isNotEmpty(item.getToolParameterUnit()); }).collect(Collectors.toMap((v0) -> { return v0.getToolParameterName(); }, (v0) -> { return v0.getToolParameterUnit(); })); for (String name : toolParameterNameList) { List head2 = new ArrayList<>(); head2.add(TOOL_EXCEL_NAME); head2.add(""); head2.add(nameUnitMap.containsKey(name) ? name + "(" + nameUnitMap.get(name) + ")" : name); list.add(head2); } return list; } public List> getData(List toolManageList) throws IllegalAccessException, NoSuchFieldException, ClassNotFoundException { Class cls = Class.forName("com.qianwen.smartman.modules.tool.excel.ToolManageExcel"); Field liftState = cls.getDeclaredField("lifeState"); List toolParameterCodeList = this.toolParameterService.list(Wrappers.lambdaQuery().orderByAsc(ToolParameter::getToolParameterCode)).stream().map(ToolParameter::getToolParameterCode).collect(Collectors.toList()); /* List toolParameterCodeList = (List) this.toolParameterService.list((Wrapper) Wrappers.lambdaQuery().orderByAsc((v0) -> { return v0.getToolParameterCode(); })).stream().map((v0) -> { return v0.getToolParameterCode(); }).collect(Collectors.toList()); */ List> list = new ArrayList<>(); for (Tool tool : toolManageList) { ToolManageExcel toolManageExcel = ToolManageConvert.INSTANCE.convertToExcel(tool); toolManageExcel.setUseState(Func.isNotEmpty(toolManageExcel.getUseState()) ? ToolUseStateEnum.findByCode(Integer.valueOf(toolManageExcel.getUseState())).getDesc() : null); toolManageExcel.setLifeCountMethod(Func.isNotEmpty(toolManageExcel.getLifeCountMethod()) ? ToolLifeCountMethodEnum.findByCode(Integer.valueOf(toolManageExcel.getLifeCountMethod())).getDesc() : null); toolManageExcel.setInitialLife(toolManageExcel.getInitialLife() + "次"); toolManageExcel.setUsedLife(toolManageExcel.getUsedLife() == null ? "0" : toolManageExcel.getUsedLife() + "次"); toolManageExcel.setRemainLife(toolManageExcel.getRemainLife() + "次"); List objectList = new ArrayList<>(); List fieldList = Arrays.stream(toolManageExcel.getClass().getDeclaredFields()).filter(field -> { return !field.equals(liftState); }).collect(Collectors.toList()); for (Field field2 : fieldList) { field2.setAccessible(true); objectList.add(field2.get(toolManageExcel)); } for (String code : toolParameterCodeList) { Field field3 = Tool.class.getDeclaredField(code); field3.setAccessible(true); Object codeValue = field3.get(tool); objectList.add(codeValue); } list.add(objectList); } return list; } }