package xin.glue.nui.E.E01; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import xin.glue.user.common.GlobalConstants; import xin.glue.user.common.LogGpError; import com.posdata.glue.PosException; import com.posdata.glue.biz.activity.PosActivity; import com.posdata.glue.biz.constants.PosBizControlConstants; import com.posdata.glue.context.PosContext; import com.posdata.glue.dao.vo.PosParameter; import com.posdata.glue.dao.vo.PosRow; import com.posdata.glue.dao.vo.PosRowSet; import com.posdata.glue.msg.PosMessage; /* Program Name SaveOrdPrcDet (NIE012090) * Description ORDER STATUS RESET * Write By KIM SUNG HO * Date 2008-10-13 */ public class SaveOrdPrcDet extends PosActivity implements GlobalConstants { public String runActivity(PosContext context) { String V_TABLE_ID = "" ; String V_TABLE_MODE = "" ; String V_ERR_DESC = "" ; String V_RTN_NAME = "" ; String V_PROC_CD = "" ; String V_PROD_END_GP = "" ; String P_PROD_END_GP = "" ; String V_MILL_PROD_END_DATE = ""; String V_MILL_SHIP_END_DATE = ""; String V_PROD_END_DATE = "" ; String P_PROD_END_DATE = "" ; String V_SHIP_END_DATE = "" ; String V_ORD_PROG_CD = "" ; String V_PROD_HOLD_CD = "" ; long V_TOT_WGT = 0 ; long V_INS_WGT = 0 ; long V_WRK_WGT = 0 ; long V_EST_WGT = 0 ; long V_END_WGT = 0 ; long V_ORD_PRC_WGT = 0 ; long V_PROD_END_WGT = 0 ; long V_ORD_REM_WGT = 0 ; long V_SHIP_END_WGT = 0 ; long V_ORD_WGT = 0 ; long V_WGT_ACVAL_MAX = 0 ; long V_HOT_ROLL_END_WGT= 0 ; long V_HOT_END_WGT = 0 ; /******************************************/ /** * modify by sjw 090908 * version: 1.31-->1.32 * desc: 解决由于充当同步而导致的超量充当的问题 */ // long V_BEF_ORD_PRC_WGT = 0 ; //os 前生产进行量 // long V_BEF_PROD_END_WGT = 0 ; //os 前生产完成量 // long V_BEF_SHIP_END_WGT = 0 ; //os 前发货完成量 // // boolean isOverChk = false; //检查超量 /******************************************/ PosMessage message = context.getMessage(); String P_ORD_NO = (String)message.get("ORD_NO"); String P_ORD_SEQ = (String)message.get("ORD_SEQ"); String P_PROG_CD = (String)message.get("PROG_CD"); Number P_WGT = (Number)message.get("WGT"); String P_BEF_PROG_CD = (String)message.get("BEF_PROG_CD"); Number P_BEF_WGT = (Number)message.get("BEF_WGT"); String P_PGMID = (String)message.get("PGMID"); String P_REG_ID = (String)message.get("REG_ID"); try { if("ZH".equals(P_ORD_NO.substring(0, 2))) { return PosBizControlConstants.SUCCESS; } DateFormat formatter = new SimpleDateFormat("yyyyMMdd"); String currDate = formatter.format(new Date()); //SELECT TBE02_ORD_PRC INFORMATION PosParameter param0 = new PosParameter(); param0.setWhereClauseParameter(0, P_ORD_NO); param0.setWhereClauseParameter(1, P_ORD_SEQ); PosRowSet ordPrcINfVO = getDao("mesdao").find("NIE012090_OrdPrcINf.select",param0); ordPrcINfVO.reset(); if (ordPrcINfVO.hasNext()) { PosRow ordPrcINfRow = ordPrcINfVO.next(); V_ORD_WGT = Long.parseLong(ordPrcINfRow.getAttribute("ORD_WGT").toString()); //V_WGT_ACVAL_MIN = Long.parseLong((ordPrcINfRow.getAttribute("WGT_ACVAL_MIN")==null? "0":ordPrcINfRow.getAttribute("WGT_ACVAL_MIN")).toString()); V_WGT_ACVAL_MAX = Long.parseLong((ordPrcINfRow.getAttribute("WGT_ACVAL_MAX")==null? "0":ordPrcINfRow.getAttribute("WGT_ACVAL_MAX")).toString()); V_ORD_PROG_CD = (String)ordPrcINfRow.getAttribute("ORD_PROG_CD"); P_PROD_END_GP = (String)ordPrcINfRow.getAttribute("PROD_END_GP"); P_PROD_END_DATE = (String)ordPrcINfRow.getAttribute("PROD_END_DATE"); V_PROD_HOLD_CD = (String)ordPrcINfRow.getAttribute("PROD_HOLD_CD"); //TL 091229 取出生产结束时间和发货结束时间,判断时间为空的情况系统自动给出 V_SHIP_END_DATE = (String)ordPrcINfRow.getAttribute("SHIP_END_DATE"); V_PROD_END_DATE = (String)ordPrcINfRow.getAttribute("PROD_END_DATE"); /***************************************************************************************************************************************************/ // V_BEF_ORD_PRC_WGT = Long.parseLong((ordPrcINfRow.getAttribute("ORD_PRC_WGT")==null? "0":ordPrcINfRow.getAttribute("ORD_PRC_WGT")).toString()); // V_BEF_PROD_END_WGT = Long.parseLong((ordPrcINfRow.getAttribute("PROD_END_WGT")==null? "0":ordPrcINfRow.getAttribute("PROD_END_WGT")).toString()); // V_BEF_SHIP_END_WGT = Long.parseLong((ordPrcINfRow.getAttribute("SHIP_END_WGT")==null? "0":ordPrcINfRow.getAttribute("SHIP_END_WGT")).toString()); // // if(V_BEF_ORD_PRC_WGT + V_BEF_PROD_END_WGT + V_BEF_SHIP_END_WGT > V_WGT_ACVAL_MAX || "F".equals(P_PROD_END_GP) || "G".equals(P_PROD_END_GP) || "X".equals(P_PROD_END_GP)) { // isOverChk = false; // }else { // isOverChk = true; // } // /***************************************************************************************************************************************************/ V_ORD_REM_WGT = V_ORD_WGT; if (V_WGT_ACVAL_MAX == 0) { V_WGT_ACVAL_MAX = V_ORD_WGT; } } else { return PosBizControlConstants.SUCCESS; //Error Display //throw new PosException("SaveOrdPrcDet --> NOT FOUND SELECT TBE02_ORD_PRC"); } if (P_PROG_CD != null && !P_PROG_CD.equals("")) { //SELECT PK CHECK FROM TBE02_ORD_PRC_DET PosParameter param1 = new PosParameter(); param1.setWhereClauseParameter(0, P_ORD_NO); param1.setWhereClauseParameter(1, P_ORD_SEQ); param1.setWhereClauseParameter(2, P_PROG_CD.substring(0, 2)); PosRowSet ordPrcDetPkVO = getDao("mesdao").find("NIE012090_OrdPrcDetPk.select",param1); if (!ordPrcDetPkVO.hasNext()) { PosParameter param2 = new PosParameter(); param2.setValueParamter(0 , P_ORD_NO); param2.setValueParamter(1 , P_ORD_SEQ); param2.setValueParamter(2 , P_PROG_CD.substring(0, 2)); //NEW PROC_CD INSERT getDao("mesdao").insert("NIE012090_OrdPrcDet.insert",param2); } } V_ORD_PRC_WGT = 0; V_PROD_END_WGT = 0; V_SHIP_END_WGT = 0; //SELECT FROM TBE02_ORD_PRC_DET PosParameter param3 = new PosParameter(); param3.setWhereClauseParameter(0, P_ORD_NO); param3.setWhereClauseParameter(1, P_ORD_SEQ); PosRowSet ordPrcDetVO = getDao("mesdao").find("NIE012090_OrdPrcDet.select",param3); ordPrcDetVO.reset(); while(ordPrcDetVO.hasNext()) { PosRow ordPrcDetRow = ordPrcDetVO.next(); V_PROC_CD = (String)ordPrcDetRow.getAttribute("PROC_CD"); V_TOT_WGT = Long.parseLong((ordPrcDetRow.getAttribute("TOT_WGT")==null? "0":ordPrcDetRow.getAttribute("TOT_WGT")).toString()); V_INS_WGT = Long.parseLong((ordPrcDetRow.getAttribute("INS_WGT")==null? "0":ordPrcDetRow.getAttribute("INS_WGT")).toString()); V_WRK_WGT = Long.parseLong((ordPrcDetRow.getAttribute("WRK_WGT")==null? "0":ordPrcDetRow.getAttribute("WRK_WGT")).toString()); V_EST_WGT = Long.parseLong((ordPrcDetRow.getAttribute("EST_WGT")==null? "0":ordPrcDetRow.getAttribute("EST_WGT")).toString()); V_END_WGT = Long.parseLong((ordPrcDetRow.getAttribute("END_WGT")==null? "0":ordPrcDetRow.getAttribute("END_WGT")).toString()); if (P_PROG_CD != null && !P_PROG_CD.equals("")) { if (V_PROC_CD.equals(P_PROG_CD.substring(0, 2))) { if (P_PROG_CD.substring(2, 3).equals("A")) { V_INS_WGT = Long.parseLong(P_WGT.toString()); } else if (P_PROG_CD.substring(2, 3).equals("B")) { V_WRK_WGT = Long.parseLong(P_WGT.toString()); } else if (P_PROG_CD.substring(2, 3).equals("D")) { V_EST_WGT = Long.parseLong(P_WGT.toString()); } else if (P_PROG_CD.substring(2, 3).equals("F")) { V_END_WGT = Long.parseLong(P_WGT.toString()); } } } if (P_BEF_PROG_CD != null && !P_BEF_PROG_CD.equals("") ) { if (V_PROC_CD.equals(P_BEF_PROG_CD.substring(0, 2))) { if (P_BEF_PROG_CD.substring(2, 3).equals("A")) { V_INS_WGT = Long.parseLong(P_BEF_WGT.toString()); } else if (P_BEF_PROG_CD.substring(2, 3).equals("B")) { V_WRK_WGT = Long.parseLong(P_BEF_WGT.toString()); } else if (P_BEF_PROG_CD.substring(2, 3).equals("D")) { V_EST_WGT = Long.parseLong(P_BEF_WGT.toString()); } else if (P_BEF_PROG_CD.substring(2, 3).equals("F")) { V_END_WGT = Long.parseLong(P_BEF_WGT.toString()); } } } //PRODUCT PROGRESS / END WEIGHT if (V_PROC_CD.equals("SF")) { V_PROD_END_WGT = V_INS_WGT + V_WRK_WGT; V_SHIP_END_WGT = V_END_WGT; //V_ORD_PRC_WGT = V_ORD_PRC_WGT + V_INS_WGT + V_WRK_WGT; V_TOT_WGT = V_INS_WGT + V_WRK_WGT + V_END_WGT; //V_ORD_REM_WGT = V_ORD_WGT - (V_ORD_PRC_WGT + V_SHIP_END_WGT); } //---------------------------增加冷轧发货量 ADD BY WXY 101020 else if(V_PROC_CD.equals("DF")){ V_PROD_END_WGT = V_INS_WGT + V_WRK_WGT; V_SHIP_END_WGT = V_END_WGT; V_TOT_WGT = V_INS_WGT + V_WRK_WGT + V_END_WGT; } //---------------------------增加热轧完成量 ADD BY WXY 101020 else if(V_PROC_CD.equals("SG")){ V_HOT_ROLL_END_WGT = V_END_WGT; V_HOT_END_WGT = V_INS_WGT + V_WRK_WGT + V_EST_WGT; //V_ORD_PRC_WGT = V_ORD_PRC_WGT + V_INS_WGT + V_WRK_WGT + V_EST_WGT; if(P_ORD_NO.equals("31201010Z002") || P_ORD_NO.equals("31201010Z003")||P_ORD_NO.equals("31201010Z004")){ V_PROD_END_WGT = V_PROD_END_WGT + V_INS_WGT + V_WRK_WGT; V_SHIP_END_WGT = V_SHIP_END_WGT + V_END_WGT; } V_ORD_PRC_WGT = V_ORD_PRC_WGT + V_INS_WGT + V_WRK_WGT + V_EST_WGT; V_TOT_WGT = V_INS_WGT + V_WRK_WGT + V_EST_WGT + V_END_WGT; } //----------------------------------------------------------- else { V_ORD_PRC_WGT = V_ORD_PRC_WGT + V_INS_WGT + V_WRK_WGT + V_EST_WGT + V_END_WGT; V_TOT_WGT = V_INS_WGT + V_WRK_WGT + V_EST_WGT + V_END_WGT; //V_ORD_REM_WGT = V_ORD_WGT - (V_ORD_PRC_WGT + V_PROD_END_WGT + V_SHIP_END_WGT); } PosParameter param4 = new PosParameter(); param4.setValueParamter(0 , String.valueOf(V_TOT_WGT)); param4.setValueParamter(1 , String.valueOf(V_INS_WGT)); param4.setValueParamter(2 , String.valueOf(V_WRK_WGT)); param4.setValueParamter(3 , String.valueOf(V_EST_WGT)); param4.setValueParamter(4 , String.valueOf(V_END_WGT)); param4.setValueParamter(5 , P_PGMID); param4.setValueParamter(6 , P_ORD_NO); param4.setValueParamter(7 , P_ORD_SEQ); param4.setValueParamter(8 , V_PROC_CD); //UPDATE FROM TBE02_ORD_PRC_DET int UpdCnt1 = getDao("mesdao").update("NIE012090_OrdPrcDet.update",param4); if (UpdCnt1 == 0 ) { V_TABLE_ID = "TBE02_ORD_PRC_DET"; V_TABLE_MODE = "U"; V_ERR_DESC = "TBE02_ORD_PRC_DET UPDATE COUNT IS ZERO"; V_RTN_NAME = "SaveOrdPrcDet TBE02_ORD_PRC_DET UPDATE1 " + P_ORD_NO + P_ORD_SEQ; LogGpError.logMessageToDB("SaveOrdPrcDet", V_TABLE_ID, V_TABLE_MODE, V_ERR_DESC, V_RTN_NAME); throw new PosException(V_RTN_NAME); } } //WHILE END /**********************************************************************/ /** * modify by sjw 090908 * version: 1.31-->1.32 * desc: 解决由于充当同步而导致的超量充当的问题 */ // if(isOverChk) { // if(V_ORD_PROG_CD.equals("D") || V_ORD_PROG_CD.equals("E") ) { // if(V_ORD_PRC_WGT + V_PROD_END_WGT + V_SHIP_END_WGT > V_WGT_ACVAL_MAX) { // throw new PosException("SaveOrdPrcDet... 超过订单量上限..."); // } // } // } /**********************************************************************/ V_ORD_REM_WGT = V_ORD_WGT - (V_ORD_PRC_WGT + V_PROD_END_WGT + V_SHIP_END_WGT); //================================================王黎添加 2009年8月12日 start================================================================ //如果没有人工指定时对订单状态进行整理 if(("".equals(P_PROD_END_GP) || P_PROD_END_GP == null) && (!"Y".equals(V_PROD_HOLD_CD) && !"R".equals(V_PROD_HOLD_CD))) { //如果订单重量小于或者等于发货完成重量 if(V_WGT_ACVAL_MAX <= V_SHIP_END_WGT && V_ORD_PRC_WGT == 0) { V_ORD_PROG_CD = "G"; //发货完成 //TL 091229 发货完成的时候,自动给出发货结束时间 if(V_SHIP_END_DATE == null || V_SHIP_END_DATE.equals("")){ V_SHIP_END_DATE = currDate; } } //如果订单重量大于发货重量,小于发货重量+生产完成重量 else if(V_WGT_ACVAL_MAX > V_SHIP_END_WGT && V_WGT_ACVAL_MAX <= (V_PROD_END_WGT+V_SHIP_END_WGT) && V_ORD_PRC_WGT == 0) { V_ORD_PROG_CD = "F"; //生产完成 //TL 091229 生产完成的时候,自动给出生产结束时间 if(V_PROD_END_DATE == null || V_PROD_END_DATE.equals("")){ V_PROD_END_DATE = currDate; } } //如果订单重量大于生产完成重量+发货完成重量,并且小于等于生产进行重量+生产完成重量+发货完成重量 else if(V_WGT_ACVAL_MAX > (V_PROD_END_WGT+V_SHIP_END_WGT) && V_WGT_ACVAL_MAX <= (V_ORD_PRC_WGT + V_PROD_END_WGT + V_SHIP_END_WGT)) { V_ORD_PROG_CD = "E"; //生产进行 V_PROD_END_DATE = ""; V_SHIP_END_DATE = ""; } //如果订单重量大于生产进行重量+生产完成重量+发货完成重量,并且生产进行重量+生产完成重量+发货完成重量不等于0 else if(V_WGT_ACVAL_MAX > (V_ORD_PRC_WGT + V_PROD_END_WGT + V_SHIP_END_WGT) && (V_ORD_PRC_WGT + V_PROD_END_WGT + V_SHIP_END_WGT)!=0) { V_ORD_PROG_CD = "E"; //生产进行 V_PROD_END_DATE = ""; V_SHIP_END_DATE = ""; } else if((V_ORD_PRC_WGT + V_PROD_END_WGT + V_SHIP_END_WGT) == 0)//如果订单重量=订单剩余重量 { if (V_ORD_PROG_CD.compareTo("D") >= 0) { V_ORD_PROG_CD = "D";//订单投入确定 } } //如果订单重量小于或者等于冷轧移送量 if(V_WGT_ACVAL_MAX <= V_HOT_ROLL_END_WGT) { //TL 091229 发货完成的时候,自动给出发货结束时间 if(V_MILL_SHIP_END_DATE == null || V_MILL_SHIP_END_DATE.equals("")){ V_MILL_SHIP_END_DATE = currDate; } } //如果订单重量大于发货重量,小于发货重量+生产完成重量 else if(V_WGT_ACVAL_MAX > V_HOT_ROLL_END_WGT && V_WGT_ACVAL_MAX <= (V_HOT_END_WGT+V_HOT_ROLL_END_WGT)) { //TL 091229 生产完成的时候,自动给出生产结束时间 if(V_MILL_PROD_END_DATE == null || V_MILL_PROD_END_DATE.equals("")){ V_MILL_PROD_END_DATE = currDate; } }else{ V_MILL_SHIP_END_DATE = ""; V_MILL_PROD_END_DATE = ""; } } else//如果人工指定了订单关闭,生产完成,发货结束则不更改订单的状态,保持原状! { V_PROD_END_GP = P_PROD_END_GP; //V_PROD_END_DATE = P_PROD_END_DATE; } //================================================王黎添加 2009年8月12日 end ================================================================ /**王黎注释 2009年8月12日 if (V_WGT_ACVAL_MIN <= (V_PROD_END_WGT + V_SHIP_END_WGT)) { if (V_ORD_PRC_WGT == 0) { V_ORD_PROG_CD = "F"; V_PROD_END_GP = "X"; V_PROD_END_DATE = currDate; } } if (V_WGT_ACVAL_MIN <= V_SHIP_END_WGT) { if ((V_ORD_PRC_WGT + V_PROD_END_WGT) == 0) { V_ORD_PROG_CD = "G"; V_SHIP_END_DATE = currDate; V_PROD_END_GP = "1"; //P_PROD_END_GP; 2009-7-26王黎修改 V_PROD_END_DATE = currDate; //P_PROD_END_DATE; 2009-7-26王黎修改 } } //------------------------2009-7-26王黎增加------------------------------- //如果人工未制定生产完成或者发货结束,由OS重新整理 if("".equals(P_PROD_END_GP) || P_PROD_END_GP == null ) { if(V_WGT_ACVAL_MIN > (V_PROD_END_WGT + V_SHIP_END_WGT)) { V_ORD_PROG_CD = "E"; V_PROD_END_GP = ""; V_PROD_END_DATE = ""; } else if(V_WGT_ACVAL_MIN < V_SHIP_END_WGT) { } else if(V_WGT_ACVAL_MIN > V_SHIP_END_WGT && V_WGT_ACVAL_MIN <= (V_PROD_END_WGT + V_SHIP_END_WGT)) { V_ORD_PROG_CD = "F"; V_PROD_END_GP = "X"; V_PROD_END_DATE = currDate; } } else { V_PROD_END_GP = P_PROD_END_GP; V_PROD_END_DATE = P_PROD_END_DATE; } //------------------------------------------------------------------------- if (V_ORD_PRC_WGT != 0) { V_ORD_PROG_CD = "E"; } else if (V_ORD_REM_WGT == V_ORD_WGT && V_ORD_PROG_CD != "B") //添加V_ORD_PROG_CD != "B"条件 王黎添加 { V_ORD_PROG_CD = "D"; } **/ PosParameter param5 = new PosParameter(); param5.setValueParamter(0 , V_ORD_PROG_CD); param5.setValueParamter(1 , V_PROD_END_GP); param5.setValueParamter(2 , V_PROD_END_DATE); param5.setValueParamter(3 , String.valueOf(V_ORD_PRC_WGT)); param5.setValueParamter(4 , String.valueOf(V_ORD_REM_WGT)); param5.setValueParamter(5 , String.valueOf(V_PROD_END_WGT)); param5.setValueParamter(6 , String.valueOf(V_SHIP_END_WGT)); param5.setValueParamter(7 , String.valueOf(V_HOT_ROLL_END_WGT)); param5.setValueParamter(8 , V_SHIP_END_DATE); param5.setValueParamter(9 , P_REG_ID); param5.setValueParamter(10 , P_PGMID); param5.setValueParamter(11, P_ORD_NO); param5.setValueParamter(12, P_ORD_SEQ); //UPDATE FROM TBE02_ORD_PRC int UpdCnt2 = getDao("mesdao").update("NIE012090_OrdPrc.update",param5); if (UpdCnt2 == 0) { V_TABLE_ID = "TBE02_ORD_PRC_DET"; V_TABLE_MODE = "U"; V_ERR_DESC = "TBE02_ORD_PRC_DET UPDATE COUNT IS ZERO"; V_RTN_NAME = "SaveOrdPrcDet TBE02_ORD_PRC_DET UPDATE2 " + P_ORD_NO + P_ORD_SEQ; LogGpError.logMessageToDB("SaveOrdPrcDet", V_TABLE_ID, V_TABLE_MODE, V_ERR_DESC, V_RTN_NAME); throw new PosException(V_RTN_NAME); } } catch (PosException ex) { context.put(SERVICE_ERR_MSG, ex.getMessage()); throw ex; } catch (Throwable t) { context.put(SERVICE_ERR_MSG, t.getMessage()); throw new PosException(t.getMessage(), t); } return PosBizControlConstants.SUCCESS; } }