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;
}
}
}
}
}
}
}
}