Untitled
unknown
plain_text
a year ago
13 kB
7
Indexable
public JoomlaMessage jobCalculateAvgPerBox(String shiftDate, String plant, ConnectionStructure conPP) {
JoomlaMessage rtn = new JoomlaMessage();
DATQCAverageBox daTQCAvg = null;
DATQcTrnsHeader daTQTrnsH = null;
DAMPPSetting daMPpSetting = null;
DATQcTrnsVisual daTQcTrnsvis = null;
DAMQcStandarWghtDtl daMQcStandarWghtDtl = null; // PQS-309 Start
debugMessage(Title + " : jobCalculateAvgPerBox() start.");
String rtnMessage = "";
String msgType = MessageLevel.MSG_WARN;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
HashMap<String, String> mappTwghtMatnr = new HashMap<String, String>();
HashMap<String, String> mappTwghtEntryVal = new HashMap<String, String>();
HashMap<String, String> mappMatnrEntryVal = new HashMap<String, String>();
try {
daTQCAvg = new DATQCAverageBox(conPP, isDebug, isAlwaysNotify);
daTQTrnsH = new DATQcTrnsHeader();
daTQTrnsH.setIsDebug(isDebug);
daTQTrnsH.setSqlConnection(daTQCAvg.getSqlConnection());
daTQcTrnsvis = new DATQcTrnsVisual();
daTQcTrnsvis.setIsDebug(isDebug);
daTQcTrnsvis.setSqlConnection(daTQCAvg.getSqlConnection());
daMPpSetting = new DAMPPSetting();
daMPpSetting.setIsDebug(isDebug);
daMPpSetting.setSqlConnection(daTQCAvg.getSqlConnection());
daMQcStandarWghtDtl = new DAMQcStandarWghtDtl(); // PQS-309 Start
daMQcStandarWghtDtl.setIsDebug(isDebug); // PQS-309 Start
daMQcStandarWghtDtl.setSqlConnection(daTQCAvg.getSqlConnection()); // PQS-309 Start
//get settingan parameter_id from table m_pp_setting
ArrayList<String> rtnListMppSetting = daMPpSetting.getListValue("param_berat_cw_echeckpoint");
if(rtnListMppSetting != null && rtnListMppSetting.size() > 0){
//get current date if shift date not input
if(shiftDate == null || shiftDate.equals("")){
Date currDate = cal.getTime();
shiftDate = formatter.format(currDate);
}
BETQcTrnsHeader objParam = new BETQcTrnsHeader();
objParam.setShiftDate(shiftDate);
objParam.setWerks(plant);
ArrayList<BETQcTrnsHeader> rtnTrnsH = daTQTrnsH.getListForJobAvg(objParam);
if(rtnTrnsH != null && rtnTrnsH.size() > 0){
String parameterIdIn = "";
String twghtIdIn = "";
//get list twghtId from t_qc_trns_header
for (int i = 0; i < rtnTrnsH.size(); i++) {
//skip if matnr is null or blank
if(rtnTrnsH.get(i).getMatnr() == null || rtnTrnsH.get(i).getMatnr().equals("")){
continue;
}
if(!twghtIdIn.equals("")){
twghtIdIn += ",";
}
twghtIdIn += "'" + rtnTrnsH.get(i).getTwghtId() + "'";
//mapping mappTwghtMatnr into twghtid => matnr
mappTwghtMatnr.put(String.valueOf(rtnTrnsH.get(i).getTwghtId()), rtnTrnsH.get(i).getMatnr());
}
debugMessage(Title + "-mappTwghtMatnr : " + mappTwghtMatnr.toString());
//get list parameter id from m_pp_setting
for (int i = 0; i < rtnListMppSetting.size(); i++) {
if(!parameterIdIn.equals("")){
parameterIdIn += ",";
}
parameterIdIn += "'" + rtnListMppSetting.get(i) + "'";
}
ArrayList<BETQcTrnsVisual> rtnListVis = daTQcTrnsvis.getListForJobAvgperBox(twghtIdIn, parameterIdIn);
if(rtnListVis.size() > 0){
// PQS-309 Start
// Extract all matnr values for batch processing
List<String> matnrList = new ArrayList<>(mappTwghtMatnr.values());
DBSearch dbs = new DBSearch();
ArrayList<BEMQcStandarWghtDtl> qcStandarWghtDtlList = daMQcStandarWghtDtl.getList(dbs, matnrList);
Map<String, BEMQcStandarWghtDtl> qcStandarWghtDtlMap = new HashMap<>();
for (BEMQcStandarWghtDtl detail : qcStandarWghtDtlList) {
qcStandarWghtDtlMap.put(detail.matnr, detail);
}
// PQS-309 End
for (int i = 0; i < rtnListVis.size(); i++) {
double entryVal = 0.0;
String matnr = mappTwghtMatnr.get(rtnListVis.get(i).getTwghtId()); // PQS-309 Start
debugMessage(Title + "-matnr yang di proses : " + matnr);
if (matnr == null || matnr.isEmpty()) { // PQS-309 Start
continue; // PQS-309 Start
} // PQS-309 End
// PQS-309 Start
BEMQcStandarWghtDtl qcStandarWghtDtl = qcStandarWghtDtlMap.get(matnr);
if (qcStandarWghtDtl == null) {
continue; // skip if no weight standard details found for this matnr
}
double minWeight = qcStandarWghtDtl.min_berat_cw;
double maxWeight = qcStandarWghtDtl.max_berat_cw;
if (minWeight == 0.0 && maxWeight == 0.0) {
continue; // skip if both min and max weights are zero
}
// PQS-309 End
//if entry value cannot convert to double then continue to next loop data
try {
entryVal = Double.parseDouble(rtnListVis.get(i).getEntryValue());
//check if value between min and max settingan
if (!(entryVal >= minWeight && entryVal <= maxWeight)) { // PQS-309 Start
continue;
} // PQS-309 End
} catch(NumberFormatException e) {
continue;
}
//mapping mappTwghtEntryVal into twghtId => entry_value; total data
String key = String.valueOf(rtnListVis.get(i).getTwghtId());
if(mappTwghtEntryVal.containsKey(key)){
String[] spltVal = mappTwghtEntryVal.get(key).split(";");
double currVal = Double.parseDouble(spltVal[0]);
int totData = Integer.parseInt(spltVal[1]);
totData++;
currVal += entryVal;
String val = String.valueOf(currVal) + ";" + String.valueOf(totData);
mappTwghtEntryVal.put(key, val);
}else{
//default value 1 if twghtId not contains in mapping
String val = rtnListVis.get(i).getEntryValue() + ";" + "1";
mappTwghtEntryVal.put(key, val);
}
}
}
debugMessage(Title + "-mappTwghtEntryVal : " + mappTwghtEntryVal.toString());
//Mapping mappMatnrEntryVal into matnr => entry_value;total_data
if(mappTwghtMatnr.size() > 0){
int cntTest = 0;
for (Map.Entry<String, String> entry : mappTwghtMatnr.entrySet()) {
cntTest++;
String twghtId = entry.getKey();
String matnr = entry.getValue();
String[] entryValTotalSplt = {"0","0"};
int totData = 1;
double entryVal = 0;
if(mappMatnrEntryVal.containsKey(matnr)){
if(mappTwghtEntryVal.containsKey(twghtId)){
entryValTotalSplt = mappTwghtEntryVal.get(twghtId).split(";");
}
//current entry value and totdata based on matnr
String[] tmpEntryVal = mappMatnrEntryVal.get(matnr).split(";");
//add current value from current loop and data inside mapping
entryVal = Double.parseDouble(tmpEntryVal[0]) + Double.parseDouble(entryValTotalSplt[0]);
totData = Integer.parseInt(tmpEntryVal[1]) + Integer.parseInt(entryValTotalSplt[1]);
mappMatnrEntryVal.put(matnr, String.valueOf(entryVal) + ";" + String.valueOf(totData));
}else{
//new entry value and totdata based on matnr
if(mappTwghtEntryVal.containsKey(twghtId)){
entryValTotalSplt = mappTwghtEntryVal.get(twghtId).split(";");
}
entryVal = Double.parseDouble(entryValTotalSplt[0]);
mappMatnrEntryVal.put(matnr, String.valueOf(entryVal) + ";" + String.valueOf(entryValTotalSplt[1]));
}
debugMessage(Title + "-mappTwghtMatnr #" + cntTest + " : twghtId=" + twghtId + ", matnr=" + matnr + " with value=" + String.valueOf(entryVal) + ";" + String.valueOf(totData));
}
}
debugMessage(Title + "-mappMatnrEntryVal : " + mappMatnrEntryVal.toString());
// CORE logic to process insert data to table t_qc_avg_wght
int idxLoop = 0;
if(mappMatnrEntryVal.size() > 0){
ArrayList<BETQCAvgWght> listValue = new ArrayList<BETQCAvgWght>();
for (Map.Entry<String, String> entry : mappMatnrEntryVal.entrySet()) {
String matnr = entry.getKey();
String[] entryValTotdata = entry.getValue().split(";");
// mapping to object
BETQCAvgWght objTmpInsert = new BETQCAvgWght();
objTmpInsert.setWerks(plant);
objTmpInsert.setMatnr(matnr);
objTmpInsert.setErfme("GR");
objTmpInsert.setMeinh("KG");
double erfmg = 0.0;
if(Double.parseDouble(entryValTotdata[0]) > 0){
erfmg = Double.parseDouble(entryValTotdata[0]) / Double.parseDouble(entryValTotdata[1]);
}
objTmpInsert.setErfmg(erfmg);
double menge = 0.0;
if(erfmg > 0){
menge = erfmg / 1000;
}
objTmpInsert.setMenge(menge);
if(menge > 0.0){
listValue.add(objTmpInsert);
idxLoop++;
}
debugMessage(Title + "-objTmpInsert #" + idxLoop + " : " + objTmpInsert.toString());
}
if(listValue.size() > 0){
daTQCAvg.insertOrUpdateRecord(listValue);
}
}
msgType = MessageLevel.MSG_OK;
rtnMessage = "Total Data processed " + idxLoop + " data";
} else {
rtnMessage = "no data to processed in date " + shiftDate + " and plant " + plant;
msgType = MessageLevel.MSG_ERR;
}
} else {
rtnMessage = "please maintain table m_pp_setting for parameter_id";
msgType = MessageLevel.MSG_ERR;
}
debugMessage(Title + " : jobCalculateAvgPerBox() finish.");
} catch (Exception ex) {
errorMessage(Title + "-getAllList : " + ex.getMessage());
rtnMessage = "Something went wrong, Please contact your support!";
ex.printStackTrace();
} finally {
if (daTQCAvg != null) {
daTQCAvg.closeConnection();
daTQCAvg = null;
}
}
rtn = new JoomlaMessage(rtnMessage, msgType);
return rtn;
}
Editor is loading...
Leave a Comment