package com.ruoyi.production.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.device.mapper.DeviceLedgerMapper; import com.ruoyi.device.pojo.DeviceLedger; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.production.dto.ProductProcessDto; import com.ruoyi.production.mapper.ProcessRouteItemMapper; import com.ruoyi.production.mapper.ProductProcessMapper; import com.ruoyi.production.mapper.ProductProcessRouteItemMapper; import com.ruoyi.production.pojo.ProcessRouteItem; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.pojo.ProductProcessRouteItem; import com.ruoyi.production.service.ProductProcessService; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service public class ProductProcessServiceImpl extends ServiceImpl implements ProductProcessService { @Autowired private ProductProcessMapper productProcessMapper; @Autowired private ProcessRouteItemMapper processRouteItemMapper; @Autowired private ProductProcessRouteItemMapper productProcessRouteItemMapper; @Autowired private DeviceLedgerMapper deviceLedgerMapper; @Autowired private SysUserMapper userMapper; @Override public IPage listPage(Page page, ProductProcessDto productProcessDto) { IPage productProcessDtoIPage = productProcessMapper.listPage(page, productProcessDto); productProcessDtoIPage.getRecords().forEach(item -> { if (ObjectUtils.isNotEmpty(item.getUserIds())) { List userIds = Arrays.stream(item.getUserIds().split(",")) .filter(s -> !s.trim().isEmpty() && !"null".equals(s)) .map(Long::parseLong) .collect(Collectors.toList()); item.setIds(userIds); if (!userIds.isEmpty()) { List sysUsers = userMapper.selectList(Wrappers.lambdaQuery().in(SysUser::getUserId, userIds)); item.setUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(","))); } } }); return productProcessDtoIPage; } @Override public AjaxResult add(ProductProcessDto productProcessDto) { String idStr = String.join(",", productProcessDto.getUserIds()); ProductProcess productProcess = new ProductProcess(); BeanUtils.copyProperties(productProcessDto, productProcess); productProcess.setUserIds(idStr); boolean save = productProcessMapper.insert(productProcess) > 0; if (save && ObjectUtils.isNull(productProcessDto.getNo())) { // 根据id生成no字段:GX + 8位数字(不足8位前面补0) String no = "GX" + String.format("%08d", productProcess.getId()); productProcess.setNo(no); productProcessMapper.updateById(productProcess); return AjaxResult.success(); } return AjaxResult.success(); } @Override public AjaxResult importData(MultipartFile file) { try { ExcelUtil util = new ExcelUtil(ProductProcess.class); List productProcessList = util.importExcel(file.getInputStream()); if (CollectionUtils.isEmpty(productProcessList)) { return AjaxResult.warn("模板错误或导入数据为空"); } productProcessList.forEach(productProcess -> { if (ObjectUtils.isEmpty(productProcess)) { throw new RuntimeException("使用模板进行导入"); } if (ObjectUtils.isEmpty(productProcess.getName())) { throw new RuntimeException("工序名称不能为空"); } if (ObjectUtils.isEmpty(productProcess.getDeviceName())) { throw new RuntimeException("工序机台不能为空"); } }); // 通过机台名称查询机台信息 List deviceNames = productProcessList.stream().map(ProductProcess::getDeviceName).collect(Collectors.toList()); List deviceLedgerList = deviceLedgerMapper.selectList(Wrappers.lambdaQuery().in(DeviceLedger::getDeviceName, deviceNames)); if (CollectionUtils.isEmpty(deviceLedgerList)) { throw new RuntimeException("未能查询到该机台信息,请检查机台名称是否正确"); } Map deviceNameMap = deviceLedgerList.stream().collect(Collectors.toMap(DeviceLedger::getDeviceName, deviceLedger -> deviceLedger)); productProcessList.forEach(productProcess -> { DeviceLedger deviceLedger = deviceNameMap.get(productProcess.getDeviceName()); productProcess.setDeviceLeaderId(deviceLedger.getId()); this.save(productProcess); if (StrUtil.isEmpty(productProcess.getNo())) { String no = "GX" + String.format("%08d", productProcess.getId()); productProcess.setNo(no); productProcessMapper.updateById(productProcess); } }); return AjaxResult.success(true); } catch (Exception e) { e.printStackTrace(); return AjaxResult.error(e.getMessage()); } } @Override public String batchDelete(List ids) { //查询是否生产中已经引用了这些工序 List processRouteItems = processRouteItemMapper.selectList(Wrappers.lambdaQuery().in(ProcessRouteItem::getProcessId, ids)); List productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.lambdaQuery().in(ProductProcessRouteItem::getProcessId, ids)); if (!CollectionUtils.isEmpty(processRouteItems) || !CollectionUtils.isEmpty(productProcessRouteItems)) { throw new RuntimeException("该工序已经被使用,无法删除"); } productProcessMapper.deleteBatchIds(ids); return null; } @Override public String updateProcess(ProductProcessDto productProcess) { if (ObjectUtils.isEmpty(productProcess.getIds())) { throw new RuntimeException("报工用户不能为空"); } productProcess.setUserIds(productProcess.getIds().stream() .map(String::valueOf) .collect(Collectors.joining(","))); productProcessMapper.updateById(productProcess); return ""; } }