更改胶桶的重量有误差

文章讲述了如何使用JavaBigDecimal类处理材料重量更新,包括将数值转换、减法运算、检查材料状态并根据特定条件更新材料重量的过程。
摘要由CSDN通过智能技术生成
import java.math.BigDecimal;

// 其他代码...

// 将 oldMaterialWeight 和 PRvalue 转换为 BigDecimal
BigDecimal oldWeight = BigDecimal.valueOf(oldMaterialWeight);
BigDecimal prValue = BigDecimal.valueOf(PRvalue);

// 定义 BigDecimal 常量 1000
BigDecimal thousand = BigDecimal.valueOf(1000);

// 计算新的材料重量
BigDecimal newMaterialWeight = oldWeight.subtract(prValue.divide(thousand));

// 将结果转换回 double
double newWeightDouble = newMaterialWeight.doubleValue();

// 更新材料重量(如果需要)
if (newWeightDouble >= 0) {
    // 更新材料重量的操作(例如使用 BSMaterialServiceUtil)可以在这里执行
    // 这里只是示例代码,实际操作可能不同
    String MaterialName = materialValue.get(0).get("MATERIALNAME").toString();
    Map<String, String> userColumns = new HashMap<String, String>();
    userColumns.put(BSMaterial.FIELD.materialWeight, Double.toString(newWeightDouble));
    BSMaterial material = BSMaterialServiceUtil.getMaterialData(MaterialName);
    MaterialModifyInfo materialModifyInfo = new MaterialModifyInfo();
    materialModifyInfo.setUserColumns(userColumns);
    eventInfo.setEventName("UpdateMaterialweightByMaterialport");
    ExtendedObjectProxy.getBSMaterialService().modify(material.getKey(), eventInfo, materialModifyInfo);
}
	if(!StringUtils.equals(machineGroupName, "MASK CLEANER"))
		{
			// Check conditions for executing the update
		    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")))
		    	{
		    		
		    		// Get the process operation name
		    		String ProcessPreationName = body.getChild("PROCESSOPERATIONNAME").getText();
		    		
		    		// Determine the material port based on process operation and machine name
		    		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";
		    		}
		    		
		    		// Query for materials in use based on conditions
		    		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>();
		    		bindMapMATL.put("MACHINENAME" ,  machineName   );
		    		bindMapMATL.put("UNITNAME" ,     unitName      );
		    		bindMapMATL.put("MATERIALPORT" , materialPort  );		
	    			List<Map<String, Object>> materialValue = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlPRInuse, bindMapMATL);

	    			 // 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 ITEMLIST element's children
    	    				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 - (double)(PRvalue/1000);
    				    				if(newMaterialWeight < 0)
    				    				{
    				    					newMaterialWeight = 0 ;
    				    				}
    				    				// Update material weight
    				    				Map<String, String> userColumns = new HashMap<String, String>();	
    				    				BSMaterial material = BSMaterialServiceUtil.getMaterialData(MaterialName);
    				    				userColumns.put(BSMaterial.FIELD.materialWeight,Double.toString(newMaterialWeight));
    									
    									
    									MaterialModifyInfo materialModifyInfo = new MaterialModifyInfo();
    									materialModifyInfo.setUserColumns(userColumns);
    									eventInfo.setEventName("UpdateMaterialweightByMaterialport");

    									ExtendedObjectProxy.getBSMaterialService().modify(material.getKey(), eventInfo, materialModifyInfo);
    				    				
//    				    				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;

    				    			
    				    			}
    			    			}
    			    				
    			    			
    			    		}

    	    			}
	    			
	    			
	    			}
		    		
		    		
		    	}
		    }
		}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值