guoyujie
2025-10-14 81cad8df0f1b33700e7fc80f271eda7f1180efb0
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -9,12 +9,15 @@
import com.example.erp.entity.pp.FlowCard;
import com.example.erp.entity.sd.*;
import com.example.erp.entity.userInfo.Log;
import com.example.erp.entity.userInfo.SysError;
import com.example.erp.exception.ServiceException;
import com.example.erp.mapper.pp.FlowCardMapper;
import com.example.erp.mapper.pp.ReportingWorkMapper;
import com.example.erp.mapper.sd.*;
import com.example.erp.service.userInfo.LogService;
import com.example.erp.service.userInfo.SysErrorService;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
@@ -22,6 +25,9 @@
import java.util.Map;
import com.fasterxml.jackson.core.type.TypeReference;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.io.IOException;
@@ -49,6 +55,8 @@
    private final OrderDetailMapper orderDetailMapper;
    private final OrderMapper orderMapper;
    private final ReportingWorkMapper reportingWorkMapper;
    @Autowired
    SysErrorService sysErrorService;
    public FlowCardService(FlowCardMapper flowCardMapper, OrderGlassDetailMapper orderGlassDetailMapper,
                           OrderProcessDetailMapper orderProcessDetailMapper, LogService logService,
@@ -65,6 +73,25 @@
        this.reportingWorkMapper = reportingWorkMapper;
    }
    //将层数字符串用逗号隔开
    public static String splitTechNumbers(String input) {
        if (input == null || input.isEmpty()) {
            return "";
        }
        List<String> result = new ArrayList<>();
        for (int i = 0; i < input.length(); i++) {
            // 特殊处理 "10"
            if (input.charAt(i) == '1' && i + 1 < input.length() && input.charAt(i + 1) == '0') {
                result.add("10");
                i++; // 跳过下一个字符
            } else {
                result.add(String.valueOf(input.charAt(i)));
            }
        }
        return String.join(",", result);
    }
    //流程卡管理查询
    public Map<String, Object> selectProcessCard(Integer pageNum, Integer pageSize,List<String> selectDate, FlowCard flowCard) {
        Integer offset = (pageNum - 1) * pageSize;
@@ -180,59 +207,76 @@
    }
    //保存流程卡数据
    @Transactional(rollbackFor = Exception.class)
    public Boolean addFlowCardSv(String orderId, Map<String, Object> object) {
        String userName = "";
        if (object.get("userName") != null) {
            userName = object.get("userName").toString();
        }
        String productionId = "";
        if (object.get("productionId") != null) {
            productionId = object.get("productionId").toString();
        }
        List<FlowCard> FlowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("flowCard")), FlowCard.class);
        if (!FlowCardList.isEmpty()) {
            for (FlowCard flowCard : FlowCardList) {
                //查询每个序号的层数
                Integer layer = flowCardMapper.selectLayer(productionId, flowCard.getOrderNumber());
                //添加流程卡数据
                flowCardMapper.addFlowCardMp(flowCard.getProcessId(), flowCard.getOrderNumber(), flowCard.getLandingSequence(), flowCard.getQuantity(), productionId, userName, layer);
                //修改分架状态,将状态改为1
                flowCardMapper.updateFlowState(productionId, flowCard.getOrderNumber());
                //查询该订单未分架数量
                Integer FlowCount = flowCardMapper.selectFlowCount(orderId);
                if (FlowCount == 0) {
                    //修改订单表分架状态为2
                    flowCardMapper.updateProcessingCard(orderId, 2);
                } else {
                    //修改订单表分架状态为1,未全部分架完成
                    flowCardMapper.updateProcessingCard(orderId, 1);
                }
                //查询订单小片表获取工艺传入小片工艺表
                List<OrderGlassDetail> orderGlassDetailList =
                        orderGlassDetailMapper.selectList(
                                new QueryWrapper<OrderGlassDetail>()
                                        .eq("order_id", orderId)
                                        .eq("order_number", flowCard.getOrderNumber())
                        );
                List<OrderProcessDetail> orderProcessDetailList = getOrderProcessDetails(orderGlassDetailList);
                orderProcessDetailList.forEach(
                        orderGlassDetail -> orderGlassDetail.setProcessId(flowCard.getProcessId()));
                //赋值订单工艺表
                orderProcessDetailMapper.insertOrderProcessDetail(orderProcessDetailList);
        boolean saveState = true;
        //设置回滚点
        Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
        try {
            String userName = "";
            if (object.get("userName") != null) {
                userName = object.get("userName").toString();
            }
            //保存日志
            Log log = new Log();
            log.setContent(object.toString());
            log.setFunction("addFlowCardSv流程卡新增");
            log.setOperatorId((String) object.get("userId"));
            log.setOperator((String) object.get("userName"));
            logService.saveLog(log);
            return true;
        } else {
            return false;
            String productionId = "";
            if (object.get("productionId") != null) {
                productionId = object.get("productionId").toString();
            }
            List<FlowCard> FlowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("flowCard")), FlowCard.class);
            if (!FlowCardList.isEmpty()) {
                for (FlowCard flowCard : FlowCardList) {
                    //查询每个序号的层数
                    Integer layer = flowCardMapper.selectLayer(productionId, flowCard.getOrderNumber());
                    //添加流程卡数据
                    flowCardMapper.addFlowCardMp(flowCard.getProcessId(), flowCard.getOrderNumber(), flowCard.getLandingSequence(), flowCard.getQuantity(), productionId, userName, layer);
                    //修改分架状态,将状态改为1
                    flowCardMapper.updateFlowState(productionId, flowCard.getOrderNumber());
                    //查询该订单未分架数量
                    Integer FlowCount = flowCardMapper.selectFlowCount(orderId);
                    if (FlowCount == 0) {
                        //修改订单表分架状态为2
                        flowCardMapper.updateProcessingCard(orderId, 2);
                    } else {
                        //修改订单表分架状态为1,未全部分架完成
                        flowCardMapper.updateProcessingCard(orderId, 1);
                    }
                    //查询订单小片表获取工艺传入小片工艺表
                    List<OrderGlassDetail> orderGlassDetailList =
                            orderGlassDetailMapper.selectList(
                                    new QueryWrapper<OrderGlassDetail>()
                                            .eq("order_id", orderId)
                                            .eq("order_number", flowCard.getOrderNumber())
                            );
                    List<OrderProcessDetail> orderProcessDetailList = getOrderProcessDetails(orderGlassDetailList);
                    orderProcessDetailList.forEach(
                            orderGlassDetail -> orderGlassDetail.setProcessId(flowCard.getProcessId()));
                    //赋值订单工艺表
                    orderProcessDetailMapper.insertOrderProcessDetail(orderProcessDetailList);
                }
                //保存日志
                Log log = new Log();
                log.setContent(object.toString());
                log.setFunction("addFlowCardSv流程卡新增");
                log.setOperatorId((String) object.get("userId"));
                log.setOperator((String) object.get("userName"));
                logService.saveLog(log);
            } else {
                saveState = false;
            }
        } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
            //将异常传入数据库
            SysError sysError = new SysError();
            sysError.setError(e+Arrays.toString(e.getStackTrace()));
            sysError.setFunc("updateFinishedGoodsInventoryAllocate");
            sysErrorService.insert(sysError);
            saveState = false;
        }
        return saveState;
    }
    public Map<String, Object> selectSchedulingSv(String selectTime1, String selectTime2, String orderId, String processes, Integer state, FlowCard flowCard) {
@@ -383,10 +427,10 @@
                        if (compound == null
                                || "null".equals(compound)
                                || compound.trim().isEmpty()){
                            List<Map<String, Object>> detailList = flowCardMapper.getDetailList(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getProcess(),flashback,landingSequence);
                            List<Map<String, Object>> detailList = flowCardMapper.getDetailList(flowCard.getProcessId(), splitTechNumbers(flowCard.getTechnologyNumber()), flowCard.getProcess(),flashback,landingSequence);
                            itemmap.put("detailList", detailList);
                        }else {//有需要同架的层
                            List<Map<String, Object>> detailList = flowCardMapper.getDetailCompoundList(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getProcess(),flashback,compound,landingSequence);
                            List<Map<String, Object>> detailList = flowCardMapper.getDetailCompoundList(flowCard.getProcessId(), splitTechNumbers(flowCard.getTechnologyNumber()), flowCard.getProcess(),flashback,splitTechNumbers(compound),landingSequence);
                            itemmap.put("detailList", detailList);
                        }
                    } else {
@@ -409,10 +453,11 @@
                            if (compound == null
                                    || "null".equals(compound)
                                    || compound.trim().isEmpty()){
                                List<Map<String, Object>> detailList = flowCardMapper.getDetailListLike(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getProcess(),flashback,landingSequence);
                                List<Map<String, Object>> detailList = flowCardMapper.getDetailListLike(flowCard.getProcessId(), splitTechNumbers(flowCard.getTechnologyNumber()), flowCard.getProcess(),flashback,landingSequence);
                                itemmap.put("detailList", detailList);
                            }else {//有需要同架的层
                                List<Map<String, Object>> detailList = flowCardMapper.getDetailListLikeCompound(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getProcess(),flashback,compound,landingSequence);
                                List<Map<String, Object>> detailList = flowCardMapper.getDetailListLikeCompound(flowCard.getProcessId(), splitTechNumbers(flowCard.getTechnologyNumber()), flowCard.getProcess(),flashback,splitTechNumbers(compound),landingSequence);
                                itemmap.put("detailList", detailList);
                            }
                        }
@@ -1440,6 +1485,9 @@
                if (orderDetail.getQuantity() > shelfQuantity) {
                    newOrderDetail.setProcessId(processId);
                    newOrderDetail.setLongSide(orderDetail.getLongSide());
                    newOrderDetail.setShortSide(orderDetail.getShortSide());
                    newOrderDetail.setBuildingNumber(orderDetail.getBuildingNumber());
                    newOrderDetail.setQuantity(Long.valueOf(shelfQuantity));
                    newOrderDetail.setHeight(orderDetail.getHeight());
                    newOrderDetail.setWidth(orderDetail.getWidth());
@@ -1453,6 +1501,10 @@
                    shelfQuantity = shelfQuantity - shelfQuantity;
                } else {
                    newOrderDetail.setProcessId(processId);
                    newOrderDetail.setLongSide(orderDetail.getLongSide());
                    newOrderDetail.setShortSide(orderDetail.getShortSide());
                    newOrderDetail.setBuildingNumber(orderDetail.getBuildingNumber());
                    newOrderDetail.setQuantity(orderDetail.getQuantity());
                    newOrderDetail.setHeight(orderDetail.getHeight());
                    newOrderDetail.setWidth(orderDetail.getWidth());