廖井涛
2025-11-11 5768f15831c623f2fb8a9e2907144aedb8b61fb4
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
@@ -7,6 +7,7 @@
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.example.erp.common.AsyncQueryExecutor;
import com.example.erp.common.Constants;
import com.example.erp.dto.pp.OrderNumberTransferDTO;
import com.example.erp.entity.pp.*;
@@ -34,12 +35,16 @@
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.client.RestTemplate;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.CompletableFuture;
@Service
@DS("pp")
@@ -70,7 +75,8 @@
    private final BasicDataMapper basicDataMapper;
    private final FinishedGoodsInventoryService finishedGoodsInventoryService;
    @Resource
    private AsyncQueryExecutor asyncExecutor;
    /*public ReportingWorkService(ReportingWorkMapper reportingWorkMapper, BasicDateProduceMapper basicDateProduceMapper, DamageDetailsMapper damageDetailsMapper, ReportingWorkDetailMapper reportingWorkDetailMapper, OrderProcessDetailMapper orderProcessDetailMapper, OrderProcessDetailService orderProcessDetailService, OrderMapper orderMapper, FlowCardMapper flowCardMapper, LogService logService, LogMapper logMapper, OrderGlassDetailMapper orderGlassDetailMapper, SysErrorService sysErrorService, OrderDetailMapper orderDetailMapper, FinishedOperateLogMapper finishedOperateLogMapper, ReportingWorkTransferMapper reportingWorkTransferMapper) {
        this.reportingWorkMapper = reportingWorkMapper;
        this.basicDateProduceMapper = basicDateProduceMapper;
@@ -264,19 +270,7 @@
        List<ReportingWorkDetail> reportingWorkDetails = JSONArray.parseArray(
                JSONObject.toJSONString(reportingWorkJson.get("detail")), ReportingWorkDetail.class);
        // 报工编号
        Integer maxId = reportingWorkMapper.selectMaxReportingWorkId();
        if (maxId == null) {
            maxId = 0;
        }
        String formattedNumber = String.format("%04d", maxId + 1);
        // 格式化当前日期
        Date currentDate = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
        String formattedDate = dateFormat.format(currentDate);
        String reportingWorkId = "BG" + formattedDate + formattedNumber;
        reportingWork.setReportingWorkId(reportingWorkId);
        // 处理工序 ID
        String[] processIdStr = reportingWork.getProcessId() != null
@@ -300,9 +294,23 @@
            reportingWork.setReportingWorkTime(LocalDateTime.now());
        }
        // 是否线补 1现补 0未现补
        // 是否现补 1现补 0未现补
        int isPatch = reportingWorkJson.getInteger("isPatch") != null
                ? reportingWorkJson.getInteger("isPatch") : 0;
        // 报工编号
        Integer maxId = reportingWorkMapper.selectMaxReportingWorkId();
        if (maxId == null) {
            maxId = 0;
        }
        String formattedNumber = String.format("%04d", maxId + 1);
        // 格式化当前日期
        Date currentDate = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
        String formattedDate = dateFormat.format(currentDate);
        String reportingWorkId = "BG" + formattedDate + formattedNumber;
        reportingWork.setReportingWorkId(reportingWorkId);
        // 主表插入
        reportingWorkMapper.insert(reportingWork);
@@ -427,7 +435,7 @@
                reportingWorkDetailMapper.insert(reportingWorkDetail);
            }
            // 更新流程卡报工数量
            // 判断最后一道工序,更新流程卡报工数量
            if (reportingWork.getNextProcess() == null || reportingWork.getNextProcess().isEmpty()) {
                LambdaUpdateWrapper<FlowCard> flowCardLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
                flowCardLambdaUpdateWrapper
@@ -643,22 +651,22 @@
        String nowDate = LocalDate.now().toString();
        //获取报工工序是否为复合工程
        String laminating = reportingWorkMapper.getProcessLaminating(thisProcess);
//合片工序
if (laminating.indexOf("step")!=-1){
    LambdaUpdateWrapper
                <ReportingWork> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper
                .eq(ReportingWork::getProcessId, processIdStr[0])
                .eq(ReportingWork::getThisProcess, reportingWork.get("process"))
                .eq(ReportingWork::getReviewedState, 0)
                .setSql("reviewed_state =1")
                .set(ReportingWork::getReviewed, userName)
                .set(ReportingWork::getExamineTime, nowDate);
        reportingWorkMapper.update(null, updateWrapper);
}else {
    reportingWorkMapper.ReviewReportingWorkMp(processIdStr[0],reportingWork.get("process"),technologyStr,userName);
        //合片工序
        if (laminating.indexOf("step")!=-1){
            LambdaUpdateWrapper
                        <ReportingWork> updateWrapper = new LambdaUpdateWrapper<>();
                updateWrapper
                        .eq(ReportingWork::getProcessId, processIdStr[0])
                        .eq(ReportingWork::getThisProcess, reportingWork.get("process"))
                        .eq(ReportingWork::getReviewedState, 0)
                        .setSql("reviewed_state =1")
                        .set(ReportingWork::getReviewed, userName)
                        .set(ReportingWork::getExamineTime, nowDate);
                reportingWorkMapper.update(null, updateWrapper);
        }else {
            reportingWorkMapper.ReviewReportingWorkMp(processIdStr[0],reportingWork.get("process"),technologyStr,userName);
}
        }
        return true;
    }
@@ -676,7 +684,7 @@
        List<Map<String, Object>> reportingWorkDetails = reportingWorkMapper.selectByReportingWorkId(reportingWorkId, reportingWork.getNextProcess());
        List<Map<String, Object>> reportingWorkDetails = reportingWorkMapper.selectByReportingWorkId(reportingWorkId, reportingWork.getNextProcess(),reportingWork.getOrderId());
        reportingWorkDetails.forEach(reportingWorkDetail -> {
            List<DamageDetails> damageDetailsList = new ArrayList<>();
            damageDetailsList = damageDetailsMapper.selectList(new LambdaQueryWrapper<DamageDetails>()
@@ -811,30 +819,92 @@
    }
    //报工管理查询
    public Map<String, Object> selectReportingWorkSv(Integer pageNum, Integer pageSize, List<String> selectDate, String orderId, ReportingWork reportingWork) {
//    public Map<String, Object> selectReportingWorkSv(Integer pageNum, Integer pageSize, List<String> selectDate, String orderId, ReportingWork reportingWork) {
//        Integer offset = (pageNum - 1) * pageSize;
//        if ("null".equals(orderId)) {
//            orderId = "";
//        }
//        String endDate = LocalDate.now().toString();
//        String startDate = LocalDate.now().minusDays(3).toString();
//        if(selectDate !=null && selectDate.size()==2){
//            if(!selectDate.get(0).isEmpty()){
//                startDate = selectDate.get(0);
//            }
//            if(!selectDate.get(1).isEmpty()){
//                endDate = selectDate.get(1);
//            }
//        }
//        Map<String, Object> map = new HashMap<>();
//        map.put("data", reportingWorkMapper.selectReportingWorkMp(offset, pageSize, startDate, endDate, orderId, reportingWork));
//        map.put("total" ,reportingWorkMapper.getFootSum(offset, pageSize, startDate, endDate, orderId, reportingWork));
//        List<String> list = new ArrayList<>();
//        list.add(startDate);
//        list.add(endDate);
//        map.put("selectDate",list);
//        return map;
//    }
    public Map<String, Object> selectReportingWorkSv(
            Integer pageNum, Integer pageSize,
            List<String> selectDate, String orderId,
            ReportingWork reportingWork) {
        Integer offset = (pageNum - 1) * pageSize;
        if ("null".equals(orderId)) {
            orderId = "";
        }
        // 默认时间:最近 3 天
        String endDate = LocalDate.now().toString();
        String startDate = LocalDate.now().minusDays(3).toString();
        if(selectDate !=null && selectDate.size()==2){
            if(!selectDate.get(0).isEmpty()){
        // 如果传入自定义日期
        if (selectDate != null && selectDate.size() == 2) {
            if (!selectDate.get(0).isEmpty()) {
                startDate = selectDate.get(0);
            }
            if(!selectDate.get(1).isEmpty()){
            if (!selectDate.get(1).isEmpty()) {
                endDate = selectDate.get(1);
            }
        }
        Map<String, Object> map = new HashMap<>();
        map.put("data", reportingWorkMapper.selectReportingWorkMp(offset, pageSize, startDate, endDate, orderId, reportingWork));
       // map.put("total", reportingWorkMapper.getPageTotal(offset, pageSize, selectTime1, selectTime2, orderId, reportingWork));
        map.put("total" ,reportingWorkMapper.getFootSum(offset, pageSize, startDate, endDate, orderId, reportingWork));
        List<String> list = new ArrayList<>();
        list.add(startDate);
        list.add(endDate);
        map.put("selectDate",list);
        return map;
        Map<String, Object> result = new HashMap<>();
        try {
            // 并行执行两条 SQL 查询
            String finalStartDate = startDate;
            String finalEndDate = endDate;
            String finalOrderId = orderId;
            CompletableFuture<List<ReportingWork>> dataFuture =
                    asyncExecutor.runAsync(() ->
                            reportingWorkMapper.selectReportingWorkMp(
                                    offset, pageSize, finalStartDate, finalEndDate, finalOrderId, reportingWork));
            CompletableFuture<Map<String, Float>> totalFuture =
                    asyncExecutor.runAsync(() ->
                            reportingWorkMapper.getFootSum(
                                    offset, pageSize, finalStartDate, finalEndDate, finalOrderId, reportingWork));
            // 等待全部完成
            CompletableFuture.allOf(dataFuture, totalFuture).join();
            result.put("data", dataFuture.get());
            result.put("total", totalFuture.get());
            // 日期范围
            List<String> list = new ArrayList<>();
            list.add(startDate);
            list.add(endDate);
            result.put("selectDate", list);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("并行查询报工记录异常:" + e.getMessage(), e);
        }
        return result;
    }
    //删除报工
@@ -1492,13 +1562,13 @@
    public List<BasicDataProduce> selectEquipmentByProcessSv(String process) {
           return reportingWorkMapper.SelectWorkBasicDeviceMp(process);
        }
    }
    public String saveWorkStorage(Map<String, Object> object) {
            //List<Map<String, Object>> flowCard = reportingWorkMapper.getStorageData();
            //finishedGoodsInventoryService.addSelectWarehousing(object);
            return null;
        }
    }
    public Map<String, Object> mesBasicDataSv() {
        Map<String, Object> map = new HashMap<>();