package org.jeecg.modules.dnc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.shiro.SecurityUtils; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.DateUtils; import org.jeecg.modules.dnc.constant.DocAttributionTypeEnum; import org.jeecg.modules.dnc.entity.*; import org.jeecg.modules.dnc.mapper.GuideCardBatchMapper; import org.jeecg.modules.dnc.service.*; import org.jeecg.modules.system.service.ISysDictService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; /** * @Description: nc文件对应数控程序加工确认表 * @Author: jeecg-boot * @Date: 2025-05-27 * @Version: V1.0 */ @Service public class GuideCardBatchServiceImpl extends ServiceImpl implements IGuideCardBatchService { @Autowired private ISysDictService sysDictService; @Autowired private IDocInfoService docInfoService; @Autowired private IDocRelativeService docRelativeService; @Autowired private IPartsInfoService partsInfoService; @Autowired private IProcessStreamService processStreamService; @Autowired private IWorkStepService workStepService; @Autowired private IDeviceTypeService deviceTypeService; /** * 生成流水号 * @param code * @return */ @Override public String getSerialNumber(String code) { // 事件编号格式:年份后两位 + 单位编码 + 操作工账号 + 流水号(4位) LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // 获取当前年份后两位 String yearSuffix = DateUtils.formatDate(new Date(), "yy"); // 查询当年所有记录 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.apply("YEAR(create_time) = YEAR(GETDATE())"); wrapper.isNotNull("serial_number"); wrapper.orderByDesc("SUBSTRING(serial_number, LEN(serial_number)-3, 4)"); List list = this.list(wrapper); // 生成流水号逻辑 String serialSuffix; if (!list.isEmpty()) { // 提取最新流水号的后四位 String lastSerial = list.get(0).getSerialNumber(); String lastSuffix = lastSerial.substring(lastSerial.length() - 4); // 流水号自增(处理9999溢出) int nextNum = Integer.parseInt(lastSuffix) + 1; serialSuffix = String.format("%04d", nextNum > 9999 ? 1 : nextNum); // 超过9999则重置为0001 } else { serialSuffix = "0001"; // 当年无记录则初始化 } // 拼接完整编号 return yearSuffix+"-"+ code+"-"+ user.getUsername()+"-"+ serialSuffix; } /** * 导入NC文件默认产生nc文件对应数控程序加工确认表 * @param docId * @return */ @Override @Transactional(rollbackFor = Exception.class) public boolean importGuideCardBatch(String docId,String attributionId,Integer attributionType){ LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); DocInfo docInfo=docInfoService.getById(docId); if (docInfo==null){ return false; } PartsInfo partsInfo=new PartsInfo(); ProcessStream processStream; WorkStep workStep; DeviceType deviceType; GuideCardBatch guideCardBatch=new GuideCardBatch(); if (DocAttributionTypeEnum.PROCESS.getCode().equals(attributionType)){ //工序设备类 deviceType=deviceTypeService.getById(attributionId); if (deviceType==null){ return false; } processStream=processStreamService.getById(deviceType.getAttributionId()); if (processStream==null){ return false; } guideCardBatch.setProcessWorkCode(processStream.getProcessCode()); partsInfo=partsInfoService.getById(processStream.getPartsId()); }else if (DocAttributionTypeEnum.WORKSITE.getCode().equals(attributionType)){ //工步设备类 deviceType=deviceTypeService.getById(attributionId); if (deviceType==null){ return false; } workStep=workStepService.getById(deviceType.getAttributionId()); if (workStep==null){ return false; } guideCardBatch.setProcessWorkCode(workStep.getStepCode()); partsInfo=partsInfoService.getById(workStep.getPartsId()); } if (partsInfo==null){ return false; } guideCardBatch.setDocId(docId); guideCardBatch.setSerialNumber(getSerialNumber("C140")); guideCardBatch.setUnit(sysDictService.queryDictTextByKey("unit_code", "C140")); guideCardBatch.setDocName(docInfo.getDocName()); guideCardBatch.setPartsCode(partsInfo.getPartsCode()); guideCardBatch.setPartsName(partsInfo.getPartsName()); guideCardBatch.setMaterielDesp(partsInfo.getMaterielDesp()); guideCardBatch.setCompiler(user.getUsername()); guideCardBatch.setCreateTime(new Date()); return this.save(guideCardBatch); } }