更改胶桶重量的代码

if(StringUtils.isNotEmpty(MaterialName) && oldMaterialWeight > 0)
	    			{
	    				double PRvalue = 0 ;
	    				boolean CONT = true ;
	    				for ( Iterator itemIterator = itemListElement.getChildren().iterator(); itemIterator.hasNext(); )
			    		{
	    					//If CONT equals true , break out of the loop.
	    					if(CONT != true)
	    					{
	    						break;
	    					}
			    			Element itemElement = (Element)itemIterator.next();
			    			itemName = itemElement.getChild("ITEMNAME").getText();
			    			siteListElement = itemElement.getChild("SITELIST");
			    			if(StringUtils.equals(itemName,"4CTDispenseQuantity"))
			    			{
			    				for ( Iterator siteIterator = siteListElement.getChildren().iterator(); siteIterator.hasNext(); )
				    			{
				    				Element siteElement = (Element)siteIterator.next();
				    				siteName = siteElement.getChild("SITENAME").getText();
				    				siteValue = siteElement.getChild("SITEVALUE").getText().toString();
				    				PRvalue = Double.parseDouble(siteValue);
				    				double newMaterialWeight = oldMaterialWeight - (PRvalue/1000);
				    				if(newMaterialWeight < 0)
				    				{
				    					newMaterialWeight = 0 ;
				    				}
				    				//Change the weight of PR barrel
				    				String updsql = "UPDATE BSMATERIAL SET MATERIALWEIGHT = :MATERIALWEIGHT WHERE MATERIALNAME = :MATERIALNAME";
				    				Map<String, Object> bindMapUPD = new HashMap<String, Object>();
									bindMapUPD.put("MATERIALWEIGHT", newMaterialWeight);
									bindMapUPD.put("MATERIALNAME", MaterialName);
									IDMFrameServiceProxy.getSqlTemplate().update(updsql, bindMapUPD);
									CONT = false;
									break;

				    			
				    			}
			    			}
			    				
			    			
			    		}
	    			}

if(!StringUtils.equals(machineGroupName, "MASK CLEANER"))
		{
		    if(StringUtils.isNotEmpty(unitName)&&StringUtils.isNotEmpty(machineName))
		    {
		    	if((StringUtils.equals(machineName,"6LPTK06")&&StringUtils.equals(unitName,"6LPTK06-COAT"))
		    			||(StringUtils.equals(machineName,"6LPTK07")&&StringUtils.equals(unitName,"6LPTK07-COAT"))
		    			||(StringUtils.equals(machineName,"6LPTK26")&&StringUtils.equals(unitName,"6LPTK26-COAT")))
		    	{
		    		// I don't know which MATERIALPORT does the machine use, so I set the value of the MATERIALPORT variable to "M01".
		    		String sqlPRInuse = "SELECT * FROM BSMATERIAL AA " +
		    				"WHERE AA.MACHINENAME= :MACHINENAME " +
		    				"AND AA.MATERIALSTATE='InUse' " +
		    				"AND AA.UNITNAME= :UNITNAME  " +
		    				"AND AA.MATERIALPORT= :MATERIALPORT";
		    		Map<String, Object> bindMapMATL = new HashMap<String, Object>();
		    		String ProcessPreationName = body.getChild("PROCESSOPERATIONNAME").getText();
		    		String materialPort = "";
		    		if(StringUtils.equals(ProcessPreationName.substring(0,1),"L") )
		    		{
		    			materialPort = "M01";
		    		}
		    		if(StringUtils.equals(ProcessPreationName.substring(0,2),"AB") && (StringUtils.equals(machineName,"6LPTK07")))
		    		{
		    			materialPort = "M02";
		    		}
		    		
		    		

		    		bindMapMATL.put("MACHINENAME" ,machineName  );
		    		bindMapMATL.put("UNITNAME" ,   unitName  );
		    		bindMapMATL.put("MATERIALPORT" ,   materialPort  );
		    		
	    			
	    			List<Map<String, Object>> MATLValue = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlPRInuse, bindMapMATL);
	    			String MaterialName = "";
	    			double oldMaterialWeight = 0;
	    			if(MATLValue.size() != 0)
	    			{
	    				MaterialName = MATLValue.get(0).get("MATERIALNAME").toString();
	    				oldMaterialWeight = Double.parseDouble( MATLValue.get(0).get("MATERIALWEIGHT").toString());
	    			}
	    			
		    		
//	    			String MaterialName = MATLValue.get(0).get("MATERIALNAME").toString();
//	    			double oldMaterialWeight = Double.parseDouble( MATLValue.get(0).get("MATERIALWEIGHT").toString());
//	    			
	    			if(StringUtils.isNotEmpty(MaterialName) && oldMaterialWeight > 0)
	    			{
	    				double PRvalue = 0 ;
	    				boolean CONT = true ;
	    				for ( Iterator itemIterator = itemListElement.getChildren().iterator(); itemIterator.hasNext(); )
			    		{
	    					//If CONT equals true , break out of the loop.
	    					if(CONT != true)
	    					{
	    						break;
	    					}
			    			Element itemElement = (Element)itemIterator.next();
			    			itemName = itemElement.getChild("ITEMNAME").getText();
			    			siteListElement = itemElement.getChild("SITELIST");
			    			if(StringUtils.equals(itemName,"4CTDispenseQuantity"))
			    			{
			    				for ( Iterator siteIterator = siteListElement.getChildren().iterator(); siteIterator.hasNext(); )
				    			{
				    				Element siteElement = (Element)siteIterator.next();
				    				siteName = siteElement.getChild("SITENAME").getText();
				    				siteValue = siteElement.getChild("SITEVALUE").getText().toString();
				    				PRvalue = Double.parseDouble(siteValue);
				    				double newMaterialWeight = oldMaterialWeight - (PRvalue/1000);
				    				if(newMaterialWeight < 0)
				    				{
				    					newMaterialWeight = 0 ;
				    				}
				    				//Change the weight of PR barrel
				    				String updsql = "UPDATE BSMATERIAL SET MATERIALWEIGHT = :MATERIALWEIGHT WHERE MATERIALNAME = :MATERIALNAME";
				    				Map<String, Object> bindMapUPD = new HashMap<String, Object>();
									bindMapUPD.put("MATERIALWEIGHT", newMaterialWeight);
									bindMapUPD.put("MATERIALNAME", MaterialName);
									IDMFrameServiceProxy.getSqlTemplate().update(updsql, bindMapUPD);
									CONT = false;
									break;

				    			
				    			}
			    			}
			    				
			    			
			    		}
	    			}
		    		
		    		
		    	}
		    }
		}
			
		
import org.apache.commons.lang.StringUtils;
import org.jdom.Element;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class MaterialUpdater {
    // 更新材料重量的方法
    public void updateMaterialWeight(Element body, List<Element> itemListElement) {
        try {
            // 从XML元素中获取机器名称和单元名称
            String machineName = body.getChild("MACHINENAME").getText();
            String unitName = body.getChild("UNITNAME").getText();

            // 检查条件,如果满足条件才执行更新操作
            if (StringUtils.isNotEmpty(machineName) && StringUtils.isNotEmpty(unitName) && !StringUtils.equals(machineName, "MASK CLEANER")) {
                if ((StringUtils.equals(machineName, "6LPTK06") && StringUtils.equals(unitName, "6LPTK06-COAT"))
                        || (StringUtils.equals(machineName, "6LPTK07") && StringUtils.equals(unitName, "6LPTK07-COAT"))
                        || (StringUtils.equals(machineName, "6LPTK26") && StringUtils.equals(unitName, "6LPTK26-COAT"))) {

                    // 获取工序名称
                    String processOperationName = body.getChild("PROCESSOPERATIONNAME").getText();
                    // 根据工序和机器名称获取材料端口
                    String materialPort = getMaterialPort(processOperationName, machineName);
                    // 根据条件查询正在使用的材料
                    List<Map<String, Object>> materialValue = getInUseMaterial(machineName, unitName, materialPort);

                    // 如果找到正在使用的材料
                    if (!materialValue.isEmpty()) {
                        String materialName = materialValue.get(0).get("MATERIALNAME").toString();
                        double oldMaterialWeight = Double.parseDouble(materialValue.get(0).get("MATERIALWEIGHT").toString());

                        // 检查材料名称和旧的材料重量是否有效
                        if (StringUtils.isNotEmpty(materialName) && oldMaterialWeight > 0) {
                            double PRvalue = 0;
                            boolean CONT = true;

                            // 遍历XML元素的子元素
                            for (Iterator<Element> itemIterator = itemListElement.iterator(); itemIterator.hasNext();) {
                                if (!CONT) {
                                    break;
                                }

                                Element itemElement = itemIterator.next();
                                String itemName = itemElement.getChild("ITEMNAME").getText();

                                // 如果元素的名称是"4CTDispenseQuantity"
                                if (StringUtils.equals(itemName, "4CTDispenseQuantity")) {
                                    // 遍历SITELIST子元素
                                    for (Iterator<Element> siteIterator = itemElement.getChild("SITELIST").getChildren().iterator(); siteIterator.hasNext();) {
                                        Element siteElement = siteIterator.next();
                                        String siteValue = siteElement.getChild("SITEVALUE").getText();
                                        PRvalue = Double.parseDouble(siteValue);
                                        double newMaterialWeight = oldMaterialWeight - (PRvalue / 1000);

                                        if (newMaterialWeight < 0) {
                                            newMaterialWeight = 0;
                                        }

                                        // 更新材料重量
                                        String updsql = "UPDATE BSMATERIAL SET MATERIALWEIGHT = :MATERIALWEIGHT WHERE MATERIALNAME = :MATERIALNAME";
                                        Map<String, Object> bindMapUPD = new HashMap<>();
                                        bindMapUPD.put("MATERIALWEIGHT", newMaterialWeight);
                                        bindMapUPD.put("MATERIALNAME", materialName);
                                        IDMFrameServiceProxy.getSqlTemplate().update(updsql, bindMapUPD);

                                        CONT = false;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            // 处理异常,例如记录日志或采取其他适当的措施
            e.printStackTrace();
        }
    }

    // 根据工序和机器名称获取材料端口
    private String getMaterialPort(String processOperationName, String machineName) {
        if (StringUtils.equals(processOperationName.substring(0, 1), "L")) {
            return "M01";
        }

        if (StringUtils.equals(processOperationName.substring(0, 2), "AB") && (StringUtils.equals(machineName, "6LPTK07"))) {
            return "M02";
        }

        return "M01"; // 如果没有匹配的条件,默认为"M01"
    }

    // 查询正在使用的材料
    private List<Map<String, Object>> getInUseMaterial(String machineName, String unitName, String materialPort) {
        String sqlPRInuse = "SELECT * FROM BSMATERIAL AA " +
                "WHERE AA.MACHINENAME = :MACHINENAME " +
                "AND AA.MATERIALSTATE = 'InUse' " +
                "AND AA.UNITNAME = :UNITNAME  " +
                "AND AA.MATERIALPORT = :MATERIALPORT";

        Map<String, Object> bindMapMATL = new HashMap<>();
        bindMapMATL.put("MACHINENAME", machineName);
        bindMapMATL.put("UNITNAME", unitName);
        bindMapMATL.put("MATERIALPORT", materialPort);

        return IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlPRInuse, bindMapMATL);
    }
}

下面是对上面的代码的一种优化,主要包括以下改进:

最终,代码的质量和安全性取决于上下文和应用程序的要求。确保适应最佳实践并考虑错误处理和安全性是至关重要的。

  1. 引入函数:将代码中的一些重要操作提取为函数,以提高代码的可读性和模块化。

  2. 引入常量:将硬编码的字符串值提取为常量,以提高代码的可维护性。

  3. 引入异常处理:添加适当的异常处理来处理数据库操作可能出现的异常。

  4. 引入日志记录:在发生错误时记录错误信息。

  5. 简化条件逻辑:简化条件逻辑,以减少嵌

  6. 上面的代码看起来在逻辑上没有明显的问题,但可能存在一些需要注意的方面:

  7. 代码的可读性:代码嵌套了多层条件和循环,这可能会使代码难以理解和维护。建议添加注释来解释代码的目的和步骤,以提高可读性。

  8. 异常处理:代码没有包含异常处理逻辑,如果数据库查询或更新出现问题,可能会导致程序崩溃。建议添加适当的异常处理代码,例如捕获并处理可能出现的异常。

  9. SQL 注入风险:虽然代码中使用了参数化的 SQL 查询和更新,但仍然需要确保输入参数不受恶意用户的操控,以防止 SQL 注入攻击。请确保维护良好的安全性实践,例如数据验证和输入验证。

  10. 数据库事务:如果这些操作需要作为一个事务进行,以确保数据库的一致性,那么需要考虑使用数据库事务来包装这些操作。

  11. 错误处理和日志记录:代码中使用了 CONT 变量来控制循环的终止,但没有明确处理可能发生的错误情况或记录错误信息。在发生错误时,建议记录适当的日志信息,以便进行故障排除。

  12. 可维护性:考虑将代码中的硬编码值(如 "MASK CLEANER"、"4CTDispenseQuantity" 等)提取为常量或配置参数,以提高代码的可维护性。

  13. 单一职责原则:这段代码包含了多个不同的操作,如数据库查询、循环迭代、条件检查和更新操作。根据单一职责原则,考虑将不同的操作封装成独立的函数或方法,以提高代码的模块化和可测试性。

import org.apache.commons.lang.StringUtils;
import org.jdom.Element;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class MaterialUpdater {
    // Method to update material weight
    public void updateMaterialWeight(Element body, List<Element> itemListElement) {
        try {
            // Get machine name and unit name from XML elements
            String machineName = body.getChild("MACHINENAME").getText();
            String unitName = body.getChild("UNITNAME").getText();

            // Check conditions for executing the update
            if (StringUtils.isNotEmpty(machineName) && StringUtils.isNotEmpty(unitName) && !StringUtils.equals(machineName, "MASK CLEANER")) {
                if ((StringUtils.equals(machineName, "6LPTK06") && StringUtils.equals(unitName, "6LPTK06-COAT"))
                        || (StringUtils.equals(machineName, "6LPTK07") && StringUtils.equals(unitName, "6LPTK07-COAT"))
                        || (StringUtils.equals(machineName, "6LPTK26") && StringUtils.equals(unitName, "6LPTK26-COAT"))) {

                    // Get the process operation name
                    String processOperationName = body.getChild("PROCESSOPERATIONNAME").getText();
                    // Determine the material port based on process operation and machine name
                    String materialPort = getMaterialPort(processOperationName, machineName);
                    // Query for materials in use based on conditions
                    List<Map<String, Object>> materialValue = getInUseMaterial(machineName, unitName, materialPort);

                    // If in-use materials are found
                    if (!materialValue.isEmpty()) {
                        String materialName = materialValue.get(0).get("MATERIALNAME").toString();
                        double oldMaterialWeight = Double.parseDouble(materialValue.get(0).get("MATERIALWEIGHT").toString());

                        // Check if material name and old material weight are valid
                        if (StringUtils.isNotEmpty(materialName) && oldMaterialWeight > 0) {
                            double PRvalue = 0;
                            boolean CONT = true;

                            // Iterate through the XML element's children
                            for (Iterator<Element> itemIterator = itemListElement.iterator(); itemIterator.hasNext();) {
                                if (!CONT) {
                                    break;
                                }

                                Element itemElement = itemIterator.next();
                                String itemName = itemElement.getChild("ITEMNAME").getText();

                                // If the element's name is "4CTDispenseQuantity"
                                if (StringUtils.equals(itemName, "4CTDispenseQuantity")) {
                                    // Iterate through SITELIST child elements
                                    for (Iterator<Element> siteIterator = itemElement.getChild("SITELIST").getChildren().iterator(); siteIterator.hasNext();) {
                                        Element siteElement = siteIterator.next();
                                        String siteValue = siteElement.getChild("SITEVALUE").getText();
                                        PRvalue = Double.parseDouble(siteValue);
                                        double newMaterialWeight = oldMaterialWeight - (PRvalue / 1000);

                                        if (newMaterialWeight < 0) {
                                            newMaterialWeight = 0;
                                        }

                                        // Update material weight
                                        String updsql = "UPDATE BSMATERIAL SET MATERIALWEIGHT = :MATERIALWEIGHT WHERE MATERIALNAME = :MATERIALNAME";
                                        Map<String, Object> bindMapUPD = new HashMap<>();
                                        bindMapUPD.put("MATERIALWEIGHT", newMaterialWeight);
                                        bindMapUPD.put("MATERIALNAME", materialName);
                                        IDMFrameServiceProxy.getSqlTemplate().update(updsql, bindMapUPD);

                                        CONT = false;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            // Handle exceptions, e.g., log or take appropriate action
            e.printStackTrace();
        }
    }

    // Determine material port based on process operation and machine name
    private String getMaterialPort(String processOperationName, String machineName) {
        if (StringUtils.equals(processOperationName.substring(0, 1), "L")) {
            return "M01";
        }

        if (StringUtils.equals(processOperationName.substring(0, 2), "AB") && (StringUtils.equals(machineName, "6LPTK07"))) {
            return "M02";
        }

        return "M01"; // Default to "M01" if no matching conditions
    }

    // Query for materials in use
    private List<Map<String, Object>> getInUseMaterial(String machineName, String unitName, String materialPort) {
        String sqlPRInuse = "SELECT * FROM BSMATERIAL AA " +
                "WHERE AA.MACHINENAME = :MACHINENAME " +
                "AND AA.MATERIALSTATE = 'InUse' " +
                "AND AA.UNITNAME = :UNITNAME  " +
                "AND AA.MATERIALPORT = :MATERIALPORT";

        Map<String, Object> bindMapMATL = new HashMap<>();
        bindMapMATL.put("MACHINENAME", machineName);
        bindMapMATL.put("UNITNAME", unitName);
        bindMapMATL.put("MATERIALPORT", materialPort);

        return IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlPRInuse, bindMapMATL);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值