lyh
2025-06-25 6d44fa56ae000ecc3b34c681e16d721789c1f49e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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<GuideCardBatchMapper, GuideCardBatch> implements IGuideCardBatchService {
 
    @Autowired
    private ISysDictService sysDictService;
 
    @Autowired
    private IDocInfoService docInfoService;
 
    @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<GuideCardBatch> 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<GuideCardBatch> 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());
        }
        guideCardBatch.setDocId(docId);
        guideCardBatch.setSerialNumber(getSerialNumber("C140"));
        guideCardBatch.setUnit(sysDictService.queryDictTextByKey("unit_code", "C140"));
        guideCardBatch.setDocName(docInfo.getDocName());
        if (partsInfo!=null){
            guideCardBatch.setPartsCode(partsInfo.getPartsCode());
            guideCardBatch.setPartsName(partsInfo.getPartsName());
            guideCardBatch.setMaterielDesp(partsInfo.getStructureType());
        }
        guideCardBatch.setFlowStatus("0");
        guideCardBatch.setCompiler(user.getUsername());
        guideCardBatch.setCreateTime(new Date());
        return this.save(guideCardBatch);
    }
}