package xin.glue.ui.J.J02; //import xin.glue.ui.common.component.PosSiteConfig; import java.sql.CallableStatement; import java.sql.SQLException; import xin.glue.ui.common.component.PosSiteLog; import com.posdata.glue.PosException; import com.posdata.glue.biz.activity.PosActivity; import com.posdata.glue.biz.constants.PosBizControlConstants; import com.posdata.glue.biz.control.PosBizControlIF; import com.posdata.glue.biz.control.PosBizProvider; import com.posdata.glue.component.PosConstants; 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.PosMESMessageImpl; import com.posdata.glue.msg.PosMessage; /* * desc:车辆排车及装车指示,运送状态不改变,只是回填排车顺序号和车厢号,发货指示状态从4到5.并且把发货指示号,运输指示号,钢卷号作为条件来更新排车顺序和车厢号 * 这里发货指示号改变的条件是需要在此发货指示号下面的所有钢卷都改变的时候才能改变发货指示的状态。 * author:唐亮 tangliang * date:2008-12-9 */ public class saveDLIVDIRCAR extends PosActivity { public String runActivity(PosContext context) { // 从页面获取参数数据,供更新页面使用 // 行状态 String[] rowStuts2 = (String[]) context.get("rowStuts2"); // 选择项 String[] CHK = (String[]) context.get("CHK"); // 排车顺序号 String[] ALLOC_SEQ = (String[]) context.get("ALLOC_SEQ"); // 车厢号 String[] TRANS_CAR_NO = (String[]) context.get("TRANS_CAR_NO"); // 运输号 String[] DLIV_DIRNO = (String[]) context.get("DLIV_DIRNO"); // 发货指示号 String[] SHIP_DIRNO = (String[]) context.get("SHIP_DIRNO"); // 批次号 String[] OLD_SAMPL_NO = (String[]) context.get("OLD_SAMPL_NO"); // 钢卷号 String[] COIL_NO = (String[]) context.get("COIL_NO"); // 登录用户 REG_ID String[] REG_ID = (String[]) context.get("REG_ID"); // 重量数据 String[] ACT_WGT = (String[]) context.get("ACT_WGT"); // 存储过程返回结果 String sCRET_NO = ""; String sRETURN_CD = ""; String sRETURN_MSG = ""; // 钢卷公共表中的ship_prog_cd String ship_prog_cd = null; // 这里必须根据运输指示号的个数来生成发货清单号 int invCnt = 0; if (DLIV_DIRNO != null) { invCnt = DLIV_DIRNO.length; } for (int j = 0; j < invCnt; j++) { // 这个时候把发货清单号刷到运输表和公共表 PosParameter paramB = new PosParameter(); paramB.setWhereClauseParameter(0, DLIV_DIRNO[j]); // 判断,重复的运输指示号不能多次生成序号 if (j == 0) { getDao("mesdao").update("UIJ020400_INV_NO.UPDATE", paramB); } else { if (DLIV_DIRNO[j - 1].equals(DLIV_DIRNO[j])) continue; else getDao("mesdao").update("UIJ020400_INV_NO.UPDATE", paramB); } // 这里应该取出运输表里生成的发货清单号,插入钢卷公共表 PosParameter paramC = new PosParameter(); paramC.setWhereClauseParameter(0, DLIV_DIRNO[j]); PosRowSet rowsC = getDao("mesdao").find("UIJ020200_13.select", paramC); String INV_NO = null; if (rowsC.hasNext()) { PosRow rowC = rowsC.next(); INV_NO = (String) rowC.getAttribute("INV_NO"); PosParameter paramD = new PosParameter(); paramD.setWhereClauseParameter(0, INV_NO); paramD.setWhereClauseParameter(1, DLIV_DIRNO[j]); getDao("mesdao").update("UIJ020200_11.update", paramD); } } // 为空的情况不能执行 if (rowStuts2 != null) { // 这里最后实际的装车情况在TBH02_COIL_COMM中对应,并且覆盖销售请车的时候对应的关系 for (int i = 0; i <= rowStuts2.length - 1; i++) { if (CHK[i].equals("Y")) { // 判断是否全部选择的标志位 boolean note = true; // 这里需要更新钢卷公共表,最终确定把卷对应到相应的车厢号。并且根据对应关系制定相应的行车命令,装卷下车 // 这里根据钢卷号,发货指示号,运输指示号来更新车厢号和排车顺序号 PosParameter param0 = new PosParameter(); param0.setWhereClauseParameter(0, TRANS_CAR_NO[i]); param0.setWhereClauseParameter(1, ALLOC_SEQ[i]); param0.setWhereClauseParameter(2, DLIV_DIRNO[i]); param0.setWhereClauseParameter(3, SHIP_DIRNO[i]); param0.setWhereClauseParameter(4, ACT_WGT[i]); param0.setWhereClauseParameter(5, OLD_SAMPL_NO[i]); getDao("mesdao").update("UIJ020300_02.update", param0); PosParameter param2 = new PosParameter(); param2.setWhereClauseParameter(0, OLD_SAMPL_NO[i]); getDao("mesdao").update("UIJ020200_09.update", param2); // 汽运不会改变车号对应关系,不用再次通过车号刷新运输表 // 这里应该需要把最后的实际装车情况放入运输表中 // 这里不改变运送表的信息,实际的车辆与卷的对应关系以钢卷公共表为准。 // PosParameter param2 = new PosParameter(); // param2.setWhereClauseParameter(0, ALLOC_SEQ[i]); // param2.setWhereClauseParameter(1, TRANS_CAR_NO[i]); // param2.setWhereClauseParameter(2, DLIV_DIRNO[i]); // // getDao("mesdao").update("UIJ010040_06.update", param2); PosParameter param33 = new PosParameter(); param33.setWhereClauseParameter(0, SHIP_DIRNO[i]); PosRowSet rows3 = getDao("mesdao").find( "UIJ020300_select_ship", param33); while (rows3.hasNext()) { // 循环的取出每一个值,并且判断是否所有的值全部都改变成希望的结果 PosRow row = rows3.next(); ship_prog_cd = (String) row .getAttribute("SHIP_PROG_CD"); logger.logInfo(SHIP_DIRNO[i] + " saveDLIVDIR查看发货指示号下的钢卷状态 : " + DLIV_DIRNO[i] + " : " + ship_prog_cd); // 当存在值为03的时候,标志位为flase while (ship_prog_cd.equals("04") || ship_prog_cd.equals("03")) { note = false; break; } } logger.logInfo("saveDLIVDIR 查看发货指示号下的钢卷是否全部装完标志 : " + note); if (note == true) { // 这里需要判断同一发货指示下的运输指示是否全部选中发完,如果没有的话不能改变发货指示的状态 // 更新发货指示号的状态,如果可以多个发货指示号混编的情况就必须全部更新 PosParameter param1 = new PosParameter(); param1.setWhereClauseParameter(0, SHIP_DIRNO[i]); getDao("mesdao").update("UIJ020300_05.update", param1); // SendProg_NIE012080(); // TL 加入调用品质的存储过程 NIB029020 CallableStatement PlRtn = getDao("mesdao") .getCallableStatement( "ExecuteProcedure_NIB0290200"); logger .logError("UIJ020300 DEBUGGER START SHIP_DIRNO=" + SHIP_DIRNO[i]); try { if (PlRtn != null) { PlRtn.setString(1, SHIP_DIRNO[i]); PlRtn.setString(2, REG_ID[0]); PlRtn.registerOutParameter(3, java.sql.Types.VARCHAR); PlRtn.execute(); logger.logError("UIJ020300 DEBUGGER EXCUTE"); // sCRET_NO = PlRtn.getString(2); sRETURN_CD = PlRtn.getString(3); // sRETURN_MSG = PlRtn.getString(4); logger .logError("UIJ020300 DEBUGGER GET RESULT " + " sRETURN_CD=" + sRETURN_CD ); logger .logInfo("saveDLIVDIR---> NIB029020 TC PlRtn1:[" + sRETURN_CD + "]:" ); } } catch (SQLException e) { logger .logError("UIJ020300 DEBUGGER EXCUTE EXCEPTION\\R\\N" + e.getMessage()); throw new PosException(e.getMessage()); } finally { if (PlRtn != null) { try { PlRtn.close(); } catch (SQLException e) { logger.logWarn(e.getMessage(), e); logger .logError("UIJ020300 DEBUGGER CLOSE EXCEPTION\\R\\N" + e.getMessage()); } } } } } else { // 这里在前台做了处理,后台就暂时不处理 logger.logInfo("在装车指示处理中出现了匹配了车厢号的钢卷没有选中的情况,UIJ010040。"); logger.logError("UIJ020300 DEBUGGER NOT EXCUTE"); } } } // 这里同一发货指示没有发完的不改变发货指示的状态,并且暂时先不管质保书生成成功与否 // return PosBizControlConstants.SUCCESS; // 通过返回结果来回滚 if ("YY".equals(sRETURN_CD)) { logger.logError("UIJ020300 DEBUGGER NIE012080 BEGIN"); SendProg_NIE012080(); logger.logError("UIJ020300 DEBUGGER NIE012080 END"); } else { logger.logInfo("saveDLIVDIR 品质保证书调用失败,返回标志 sRETURN_CD : " + sRETURN_CD); logger.logError("UIJ040041 DEBUGGER FAIL"); // 这里出现的异常情况是板坯号与钢卷号不匹配 String vtemp = "sRETURN_CD"; context.put("rs", vtemp); // 回滚 this.rollbackTransaction("tx1"); } return PosBizControlConstants.SUCCESS; } public void SendProg_NIE012070(String COIL_NO, String BefProg, String OrdNo, String OrdSeq, Number wgt, String RegId) { logger.logInfo("PosSAveOutHeatFurnace---> wgt:" + wgt); // BigDecimal wgt = new BigDecimal(); PosContext context = new PosContext(); PosMessage message = new PosMESMessageImpl(); String TcId = "NIE012070"; message.setTCID(TcId); message.setObject("MSG_ID", TcId); message.setObject("BEF_ORD_NO", null); message.setObject("BEF_ORD_SEQ", null); message.setObject("ORD_NO", OrdNo); message.setObject("ORD_SEQ", OrdSeq); message.setObject("BEF_PROG_CD", BefProg); message.setObject("PROG_CD", "SFB"); message.setObject("MAT_TYPE", "AR"); message.setObject("MAT_NO", COIL_NO); message.setObject("WGT", wgt); message.setObject("PGMID", "UIJ010040"); message.setObject("REG_ID", RegId); context.setMessage(message); this.processComponent(PosConstants.CREATE_MESSAGE, context); String transactionCode = context.getMessage().getTC(); logger.logInfo("PosSAveOutHeatFurnace---> transactionCode:(" + transactionCode + ")"); message.setTCID(TcId); String serviceName = "NIE012070"; String SERVICE_POSTFIX = "-service"; context.put(PosBizControlConstants.SERVICE_NAME, serviceName + SERVICE_POSTFIX); context.setMessage(message); PosBizControlIF controller = PosBizProvider.getController(); controller.doSubController(context, false); logger .logInfo("PosSAveOutHeatFurnace---> NIE012070 TC SendProgress end"); } public void SendProg_NIE012080() { PosContext context = new PosContext(); PosMessage message = new PosMESMessageImpl(); String TcId = "NIE012080"; message.setTCID(TcId); message.setObject("MSG_ID", TcId); message.setObject("AA", null); context.setMessage(message); this.processComponent(PosConstants.CREATE_MESSAGE, context); String transactionCode = context.getMessage().getTC(); message.setTCID(TcId); String serviceName = "NIE012080"; String SERVICE_POSTFIX = "-service"; context.put(PosBizControlConstants.SERVICE_NAME, serviceName + SERVICE_POSTFIX); context.setMessage(message); PosBizControlIF controller = PosBizProvider.getController(); controller.doSubController(context, false); } }