huang
2025-10-22 78d73df2f8e0c6855d65eb1f2c6df08e0f99bab1
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
@@ -4,15 +4,19 @@
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.github.yulichang.query.MPJQueryWrapper;
import com.mes.common.config.Const;
import com.mes.damage.entity.request.DamageRequest;
import com.mes.damage.service.DamageService;
import com.mes.engineering.entity.Engineering;
import com.mes.engineering.service.EngineeringService;
import com.mes.pp.entity.OptimizeProject;
import com.mes.pp.mapper.OptimizeProjectMapper;
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
import com.mes.rawglassdetails.service.RawGlassStorageDetailsService;
import com.mes.uppattenusage.entity.OptimizeUpPattenUsage;
import com.mes.uppattenusage.entity.UpPattenUsage;
import com.mes.uppattenusage.mapper.UpPattenUsageMapper;
@@ -22,8 +26,14 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
/**
 * <p>
@@ -45,12 +55,16 @@
    DamageService damageService;
    @Autowired
    RedisUtil redisUtil;
    @Resource
    RawGlassStorageDetailsService rawGlassStorageDetailsService;
    @Override
    public List<UpPattenUsage> prioritylist() {
        //获取正在上片的任务id
        Engineering engineering= engineeringService.selectInitiate(1);
        Engineering engineering = engineeringService.selectInitiate(1);
        //log.info("将参数传入到查询类里{}",engineering);
        if(engineering!=null){
        if (engineering != null) {
            LambdaQueryWrapper<UpPattenUsage> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(UpPattenUsage::getEngineeringId, engineering.getEngineerId());
            return this.list(wrapper);
@@ -65,7 +79,7 @@
        //获取正在上片的任务id
        Engineering engineering = engineeringService.selectInitiates(1, cell.getStationCell());
        //log.info("将参数传入到查询类里{}",engineering);
        if(engineering!=null){
        if (engineering != null) {
            LambdaQueryWrapper<UpPattenUsage> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(UpPattenUsage::getEngineeringId, engineering.getEngineerId());
            if (cell.getState() != null) {
@@ -101,35 +115,35 @@
        // 创建一个 List 用于保存映射后的实体对象
        List<UpPattenUsage> resultList = new ArrayList<>();
// 遍历查询结果中的每个 Map 对象
        // 遍历查询结果中的每个 Map 对象
        if (upPattenUsageList != null) {
            for (OptimizeUpPattenUsage map : upPattenUsageList) {
                // 创建一个新的 OptimizeProject 对象
                UpPattenUsage optimizeProject = new UpPattenUsage();
                // 将 Map 中的每个键值对映射到 OptimizeProject 对象的相应字段上
                optimizeProject.setEngineeringId(map.getProjectNo());
                optimizeProject.setFilmsId( map.getGlassType());
                optimizeProject.setFilmsId(map.getGlassType());
                optimizeProject.setWidth(map.getWidth());
                optimizeProject.setHeight( map.getHeight());
                optimizeProject.setHeight(map.getHeight());
                optimizeProject.setThickness(map.getGlassThickness());
                optimizeProject.setLayoutSequence( map.getStockId());
                optimizeProject.setLayoutSequence(map.getStockId());
                optimizeProject.setState(0);
                // 将映射后的对象添加到结果列表中
                resultList.add(optimizeProject);
            }
        }
        log.info("查询出上片顺序集合保存到实体类{}",resultList);
        log.info("查询出上片顺序集合保存到实体类{}", resultList);
        return resultList;
    }
    @Override
    public void saveUpPattenUsage(List<UpPattenUsage> upPattenUsage) {
        if (CollectionUtil.isEmpty(upPattenUsage)){
        if (CollectionUtil.isEmpty(upPattenUsage)) {
            return;
        }
        String engineerId = upPattenUsage.get(0).getEngineeringId();
        int count = this.count(new LambdaQueryWrapper<UpPattenUsage>().eq(UpPattenUsage::getEngineeringId, engineerId));
        if (count <=0){
        if (count <= 0) {
            //保存原片使用详情表
            this.saveBatch(upPattenUsage);
        }
@@ -163,7 +177,7 @@
    @Override
    public void deleteTask(String engineerId) {
        QueryWrapper<UpPattenUsage> wrapper = new QueryWrapper<>();
        wrapper.eq("engineering_id",engineerId);
        wrapper.eq("engineering_id", engineerId);
        this.remove(wrapper);
    }
@@ -171,9 +185,9 @@
    @Override
    public UpPattenUsage selectOverTask() {
        QueryWrapper<UpPattenUsage>wrapper = new QueryWrapper<>();
        wrapper.gt("state",0)
                .lt("state",99)
        QueryWrapper<UpPattenUsage> wrapper = new QueryWrapper<>();
        wrapper.gt("state", 0)
                .lt("state", 99)
                .last("limit 1");
        return this.getOne(wrapper);
    }
@@ -181,8 +195,8 @@
    @Override
    //获取最后一块玻璃
    public UpPattenUsage selectSequence(UpPattenUsage upPattenUsage) {
        QueryWrapper<UpPattenUsage>wrapper = new QueryWrapper<>();
        wrapper.eq("engineering_id",upPattenUsage.getEngineeringId())
        QueryWrapper<UpPattenUsage> wrapper = new QueryWrapper<>();
        wrapper.eq("engineering_id", upPattenUsage.getEngineeringId())
                .orderByDesc("layout_sequence")
                .last("limit 1");
        return this.getOne(wrapper);
@@ -229,4 +243,91 @@
        damageService.autoSubmitReport(request.getGlassId(), request.getLine(), request.getWorkingProcedure(), "上片机", request.getState());
        return "success";
    }
    @Override
    public Boolean insertTask(Integer quantity, Integer slot) {
        engineeringService.update(
                new LambdaUpdateWrapper<Engineering>()
                        .eq(Engineering::getState, Const.ENGINEERING_RUNNING)
                        .set(Engineering::getState, Const.ENGINEERING_SUCCESS)
        );
        Calendar calendar = Calendar.getInstance();
        // 当天 00:00:00
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        Date todayStart = calendar.getTime();
        // 当天 23:59:59
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        Date todayEnd = calendar.getTime();
        // 2. 构建查询条件:状态为“运行中” + 时间在当天范围内
        Integer count = engineeringService.count(
                new LambdaQueryWrapper<Engineering>()
                        .eq(Engineering::getState, Const.ENGINEERING_RUNNING) // 原状态条件
                        // 核心:createTime 大于等于当天开始,小于等于当天结束
                        .ge(Engineering::getCreateTime, todayStart)
                        .le(Engineering::getCreateTime, todayEnd)
        );
        RawGlassStorageDetails rawGlassStorageDetails = rawGlassStorageDetailsService.getOne(
                new LambdaQueryWrapper<RawGlassStorageDetails>()
                        .eq(RawGlassStorageDetails::getSlot, slot)
                        .eq(RawGlassStorageDetails::getState, 100)
        );
        String engineerId = generateSingleProjectNo(count);
        Engineering engineering = new Engineering();
        engineering.setEngineerId(engineerId);
        engineering.setEngineerName(rawGlassStorageDetails.getFilmsId());
        engineering.setState(1);
        engineering.setStationCell(5);
        engineering.setPlanPatternTotal(slot);
        engineering.setFilmsId(rawGlassStorageDetails.getFilmsId());
        engineeringService.save(engineering);
        for (int i = 1; i <= quantity; i++) {
            UpPattenUsage saveDetails = new UpPattenUsage();
            saveDetails.setEngineeringId(engineerId);
            saveDetails.setFilmsId(rawGlassStorageDetails.getFilmsId());
            saveDetails.setWidth(rawGlassStorageDetails.getPatternWidth());
            saveDetails.setHeight(rawGlassStorageDetails.getPatternHeight());
            saveDetails.setThickness(rawGlassStorageDetails.getPatternThickness());
            saveDetails.setLayoutSequence(i);
            saveDetails.setState(0);
            this.save(saveDetails);
        }
        return Boolean.TRUE;
    }
    private static String generateSingleProjectNo(int currentCount) {
        // 1. 固定前缀 "P"
        final String PREFIX = "P";
        // 2. 格式化当前日期为「年2位+月2位+日2位」(如2025-05-08 → "250508")
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyMMdd");
        String dateStr = LocalDate.now().format(dateFormatter);
        // 3. 计算新序号(已有数量+1),并处理“小于10补0”
        int newSequence = currentCount + 1;
        // 关键:%02d 表示固定2位数字,不足则补0(1→"01",9→"09",10→"10")
        String formattedSequence = String.format("%02d", newSequence);
        // 4. 拼接工程号(前缀+日期+补0后的序号)
        return PREFIX + dateStr + formattedSequence;
    }
    @Override
    public Boolean deleteUpPattenTask(String id) {
        //删除上片顺序表
        QueryWrapper<UpPattenUsage> wrapper = new QueryWrapper<>();
        wrapper.eq("id",id);
        return this.remove(wrapper);
    }
}