廖井涛
2025-02-20 02430791c250d61bef654f62d76de9dfabe826c7
Merge branch 'master' of http://bore.pub:10439/r/ERP_override
5个文件已修改
209 ■■■■ 已修改文件
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderDetail.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java 160 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java
@@ -440,4 +440,10 @@
            @RequestBody Map<String, Object> object) {
        return Result.seccess(flowCardService.updateProcessCardRack(object));
    }
    @ApiOperation("智能分架")
    @PostMapping("/processCardAutoRack")
    public Result processCardAutoRack(@ RequestBody Map<String, Object> object) {
        return Result.seccess(flowCardService.processCardAutoRack(object));
    }
}
north-glass-erp/src/main/java/com/example/erp/entity/sd/OrderDetail.java
@@ -67,4 +67,7 @@
    private Integer differentSize;//用于标签打印时  明细是否显示
    //private Product product;
    @TableField(exist= false,select = false)
    private String flowCardId;
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.erp.entity.pp.FlowCard;
import com.example.erp.entity.sd.OrderDetail;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -226,4 +227,8 @@
    int flowCardToOptimizeCount(String orderId);
    List<Map<String, Object>> getFlowCardDetail(String processId);
    Map<String,Object> getGlassThicknessByProdutionId(String orderId,String productionId);
    List<OrderDetail>  getOrderDetailByProductionId(String orderId, String productionId);
}
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.erp.common.Constants;
import com.example.erp.entity.pp.FlowCard;
import com.example.erp.entity.sd.OrderDetail;
import com.example.erp.entity.sd.OrderGlassDetail;
import com.example.erp.entity.sd.OrderProcessDetail;
import com.example.erp.entity.userInfo.Log;
@@ -264,12 +265,14 @@
    private static Map<String, Object> parseJson(String json) {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            return objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {});
            return objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {
            });
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
    public Map<String, Object> getSelectPrintingSv(Map<String, Object> object, String printMerge, String printLike, String merge) {
        if (printMerge == null){
            printMerge= "";
@@ -298,8 +301,7 @@
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailList(flowCard.getProcessId(), flowCard.getTechnologyNumber(),flowCard.getProcess());
                        itemmap.put("detailList", detailList);
                    }
                    else {
                    } else {
                        if(merge.equals("1")&& flowCard.getMerge().equals(1)){
                            // 检查是否已经处理过该 processId,如果处理过则跳过
                            if (processedProcessIds.contains(flowCard.getProcessId())) {
@@ -320,16 +322,14 @@
                    }
                }
                else {
                } else {
                    //流程卡明细数据
                    if (printLike.equals("")||printLike.equals("null") ){
                        itemmap.put("detail", flowCardMapper.getPrimaryListMerge(flowCard.getProcessId(), printMerge, flowCard.getOrderId()));
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailList(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getProcess());
                        itemmap.put("detailList", detailList);
                    }
                    else {
                    } else {
                        itemmap.put("detail", flowCardMapper.getPrimaryList(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getGlassChild(), flowCard.getProcess(), flowCard.getOrderId()));
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailListLike(flowCard.getProcessId(), printMerge, flowCard.getProcess());
@@ -399,8 +399,7 @@
                            itemmap.put("detailList", detailList);
                        }
                    }
                    else {
                } else {
                        if(flowCard.getPatchState().equals(0)){
                            if(merge.equals("1")&& flowCard.getMerge().equals(1)){
@@ -428,7 +427,6 @@
                    }
                //工艺流程
@@ -477,8 +475,7 @@
                flowCardMapper.updateComposing(flowCard.getProcessId());
            }
            return true;
        }
        else {
        } else {
            return false;
        }
@@ -491,8 +488,7 @@
                flowCardMapper.updateProcessCardRack(flowCard.getProcessId(),flowCard.getTechnologyNumber(),flowCard.getRack());
            }
            return true;
        }
        else {
        } else {
            return false;
        }
@@ -589,8 +585,7 @@
                    // 将该 processId 加入已处理集合
                    processedProcessIds.add(processId);
                }
            }
            else{//小片标签
            } else {//小片标签
                for (FlowCard flowCard : flowCardList) {
                    Map<String, Object> itemmap = new HashMap<>();
                    itemmap.put("data", flowCardMapper.getPrintCustomDataSemi(flowCard.getProcessId(),flowCard.getTechnologyNumber(),flowCard.getProcess()));
@@ -625,8 +620,7 @@
                    // 将该 processId 加入已处理集合
                    processedProcessIds.add(processId);
                }
            }
            else{//小片标签
            } else {//小片标签
                for (FlowCard flowCard : flowCardList) {
                    Map<String, Object> itemmap = new HashMap<>();
                    itemmap.put("data", flowCardMapper.getPrintCustomDataSemi(flowCard.getProcessId(),flowCard.getTechnologyNumber(),flowCard.getProcess()));
@@ -694,8 +688,7 @@
                    itemmap.put("detail", flowCardMapper.getPrimaryListRefund(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getOrderNumber(),flowCard.getReportingWorkId(),mergeTechnologyNumber,flowCard.getPatchReason(),flowCard.getOrderId()));
                    List<Map<String, Object>> detailList = flowCardMapper.getDetailListRefund(flowCard.getProcessId(), flowCard.getTechnologyNumber(),flowCard.getOrderNumber(),flowCard.getReportingWorkId(),flowCard.getPatchReason());
                    itemmap.put("detailList", detailList);
                }
                else {
                } else {
                    //流程卡明细数据
                    if (printLike.equals("")||printLike.equals("null") ){
@@ -703,8 +696,7 @@
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailListRefund(flowCard.getProcessId(), flowCard.getTechnologyNumber(),flowCard.getOrderNumber(), flowCard.getReportingWorkId(), flowCard.getPatchReason());
                        itemmap.put("detailList", detailList);
                    }
                    else {
                    } else {
                        itemmap.put("detail", flowCardMapper.getPrimaryListRefund(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getOrderNumber(), flowCard.getReportingWorkId(), mergeTechnologyNumber, flowCard.getPatchReason(), flowCard.getOrderId()));
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailListLikeRefund(flowCard.getProcessId(), printMerge,flowCard.getOrderNumber(),flowCard.getReportingWorkId());
@@ -746,8 +738,7 @@
                    itemmap.put("detail", flowCardMapper.getPrimaryListRework(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getOrderNumber(),flowCard.getReportingWorkId(),flowCard.getOrderId()));
                    List<Map<String, Object>> detailList = flowCardMapper.getDetailListRework(flowCard.getProcessId(), flowCard.getTechnologyNumber(),flowCard.getOrderNumber(),flowCard.getReportingWorkId());
                    itemmap.put("detailList", detailList);
                }
                else {
                } else {
                    //流程卡明细数据
                    if (printLike.equals("")||printLike.equals("null") ){
@@ -755,8 +746,7 @@
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailListRework(flowCard.getProcessId(), flowCard.getTechnologyNumber(),flowCard.getOrderNumber(), flowCard.getReportingWorkId());
                        itemmap.put("detailList", detailList);
                    }
                    else {
                    } else {
                        itemmap.put("detail", flowCardMapper.getPrimaryListRework(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()),flowCard.getOrderNumber(), flowCard.getReportingWorkId(), flowCard.getOrderId()));
                        List<Map<String, Object>> detailList = flowCardMapper.getDetailListLikeRework(flowCard.getProcessId(), printMerge,flowCard.getOrderNumber(),flowCard.getReportingWorkId());
@@ -824,8 +814,7 @@
                    processedProcessIds.add(processId);
                    processedProcessIds.add(orderNumber);
                }
            }
            else{//小片标签
            } else {//小片标签
                for (FlowCard flowCard : flowCardList) {
                    Map<String, Object> itemmap = new HashMap<>();
                    itemmap.put("data", flowCardMapper.getPrintCustomDataSemi(flowCard.getProcessId(),flowCard.getTechnologyNumber(),flowCard.getProcess()));
@@ -991,8 +980,7 @@
                    else if (detailType==1) {
                        itemmap.put("data", flowCardMapper.getPrintCustomDataProject(flowCard.getProjectNo()));
                    }
                    else  {
                } else {
                        itemmap.put("data", flowCardMapper.getPrintCustomDataProject(flowCard.getProjectNo()));
                    }
@@ -1031,7 +1019,6 @@
        }
    }
    public Integer updateProjectLabelPrintCount(String projectNo) {
@@ -1063,6 +1050,117 @@
        map.put("data", list);
        return map;
    }
    public Object processCardAutoRack(Map<String, Object> object) {
        String orderId = "NG25000004";
        String productionId = "NG25000004B";
        /*String orderId = object.get("orderId").toString();
        String productionId = object.get("productionId").toString();
        Integer inMaxQuantity = Integer.parseInt(object.get("inMaxQuantity").toString());
        Float inWeight =  Float.parseFloat(object.get("inWeight").toString());
        Float shelfThickness =  Float.parseFloat(object.get("shelfThickness").toString())*1000;
        Float spacerThickness =  Float.parseFloat(object.get("spacerThickness").toString());
        */
        Integer inMaxQuantity = 30;
        Float inWeight = 100.0f;
        Float shelfThickness = 2000.0f;
        /*垫片厚度*/
        Float spacerThickness = 0.0f;
        Map<String, Object> thickness = flowCardMapper.getGlassThicknessByProdutionId(orderId, productionId);
        Float glassTotalThickness = Float.parseFloat(thickness.get("totalThickness").toString());
        Float glassThickness = Float.parseFloat(thickness.get("thickness").toString());
        //获取此工程号订单明细信息
        List<OrderDetail> orderDetails = flowCardMapper.getOrderDetailByProductionId(orderId, productionId);
        //根据玻璃厚度和垫片厚度当前架子最大可放数量
        Integer shelfMaxQuantityByThickness = (int) (shelfThickness / (glassTotalThickness + spacerThickness));
        //用于接收最终生成的流程卡
        List<OrderDetail> orderDetailList = new ArrayList<>();
        //流程卡自增符号
        int flowCardNo = 1;
        // 当前架子剩余可放数量
        Integer shelfQuantity = 0;
        for (OrderDetail orderDetail : orderDetails) {
            //架子根据尺寸重量最大能放多少
            int shelfQuantityByWeight = (int) (inWeight /
                    (orderDetail.getHeight()
                            * orderDetail.getWidth()
                            * glassThickness
                            * 2.5 / 1000000)
            );
            //当前订单明细剩余数量
            if (shelfQuantity == 0) {
                shelfQuantity = shelfQuantityByWeight;
            }else if(shelfQuantity>0){
                String FlowCardId = orderDetailList.get(orderDetailList.size() - 1).getFlowCardId();
                double flowCardWeight = 0.0;
                for (OrderDetail orderDetail1 : orderDetailList) {
                    if (orderDetail1.getFlowCardId().equals(FlowCardId)) {
                        flowCardWeight = orderDetail1.getHeight()*orderDetail1.getQuantity()* orderDetail1.getWidth()* glassThickness* 2.5 / 1000000;
                    }
                }
                if(flowCardWeight>0){
                    flowCardWeight = inWeight - flowCardWeight;
                    shelfQuantity = (int) (flowCardWeight /
                            (orderDetail.getHeight()
                                    * orderDetail.getWidth()
                                    * glassThickness
                                    * 2.5 / 1000000));
                    if (shelfQuantity == 0) {
                        shelfQuantity = shelfQuantityByWeight;
                    }
                }
            }
            //取最小值
            Integer maxQuantity = 0;
            while (orderDetail.getQuantity() > 0) {
                OrderDetail newOrderDetail = new OrderDetail();
                //当死循环中,当前架子剩余数量为0时,重新计算架子剩余数量
                if (shelfQuantity == 0) {
                    shelfQuantity = shelfQuantityByWeight;
                }
                String processId = productionId + String.format("%05d", flowCardNo);
                //取最小值
                maxQuantity = Math.min(shelfQuantity, Math.min(inMaxQuantity, shelfMaxQuantityByThickness));
                /*System.out.println(shelfQuantity + "," + inMaxQuantity + "," + shelfMaxQuantityByThickness);
                System.out.println(flowCardNo + "," + maxQuantity);
                System.out.println("------");*/
                if (orderDetail.getQuantity() > maxQuantity) {
                    newOrderDetail.setFlowCardId(processId);
                    newOrderDetail.setQuantity(Long.valueOf(maxQuantity));
                    newOrderDetail.setHeight(orderDetail.getHeight());
                    newOrderDetail.setWidth(orderDetail.getWidth());
                    orderDetailList.add(newOrderDetail);
                    orderDetail.setQuantity(orderDetail.getQuantity() - maxQuantity);
                    flowCardNo += 1;
                } else {
                    newOrderDetail.setFlowCardId(processId);
                    newOrderDetail.setQuantity(orderDetail.getQuantity());
                    newOrderDetail.setHeight(orderDetail.getHeight());
                    newOrderDetail.setWidth(orderDetail.getWidth());
                    orderDetailList.add(newOrderDetail);
                    //当前架子剩余数量
                    shelfQuantity = shelfQuantity - Math.toIntExact(orderDetail.getQuantity());
                    if (shelfQuantity == 0) {
                        flowCardNo += 1;
                    }
                    orderDetail.setQuantity(0L);
                }
            }
        }
        return orderDetailList;
    }
}
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -588,7 +588,8 @@
                      ogdss.concatenated_glass_child                                   as glass_child,
                      fc.founder,
                      date(fc.splitFrame_time)                                         as splitFrame_time,
                      processed_part                                                   as process
                      processed_part                                                   as process,
                      merge
               from flow_card as fc
                        left join sd.order_glass_detail as ogd
@@ -625,7 +626,8 @@
                      ogdss.concatenated_glass_child                                   as glass_child,
                      fc.founder,
                      date(fc.splitFrame_time)                                         as splitFrame_time,
                      processed_part                                                   as process
                      processed_part                                                   as process,
                      merge
               from flow_card as fc
                        left join sd.order_glass_detail as ogd
@@ -2161,7 +2163,8 @@
                      fc.founder,
                      date(fc.splitFrame_time)                                         as splitFrame_time,
                      fc.print_status,
                      processed_part                                                   as process
                      processed_part                                                   as process,
                      merge
               from flow_card as fc
                        left join sd.order_glass_detail as ogd
@@ -2199,7 +2202,8 @@
                      fc.founder,
                      date(fc.splitFrame_time)                                         as splitFrame_time,
                      fc.print_status,
                      processed_part                                                   as process
                      processed_part                                                   as process,
                      merge
               from flow_card as fc
                        left join sd.order_glass_detail as ogd
@@ -2874,4 +2878,27 @@
        group by a.process_id,a.technology_number
    </select>
    <select id="getGlassThicknessByProdutionId">
        select total_thickness as 'totalThickness',thickness as 'thickness' from sd.product
        where id = (
            select distinct b.product_id from sd.order_glass_detail as a
                    left join sd.order_detail as b
                    on a.order_id = b.order_id and a.order_number = b.order_number
                    where a.order_id = #{orderId}
                    and a.production_id = #{productionId}
            )
    </select>
    <select id="getOrderDetailByProductionId">
        select * from (select a.*,
        IF(a.height >= a.width, a.height, a.width) as 'long',
        IF(a.height &lt; a.width, a.height, a.width) as 'short'
        from sd.order_detail as a
        left join sd.order_glass_detail as b
        on a.order_id = b.order_id and a.order_number = b.order_number
        where a.order_id = #{orderId} and b.production_id = #{productionId}
        group by a.order_number) as c
        order by c.`long` desc
    </select>
</mapper>