|  |  |  | 
|---|
|  |  |  | import com.core.common.Cools; | 
|---|
|  |  |  | import com.core.common.R; | 
|---|
|  |  |  | import com.zy.asrs.entity.AgvBasDevp; | 
|---|
|  |  |  | import com.zy.asrs.entity.AgvLocMast; | 
|---|
|  |  |  | import com.zy.asrs.entity.AgvWrkMast; | 
|---|
|  |  |  | import com.zy.asrs.entity.WrkMastExecute; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.AgvTaskCallBackParam; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.zy.common.web.BaseController; | 
|---|
|  |  |  | import lombok.Setter; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.slf4j.Logger; | 
|---|
|  |  |  | import org.slf4j.LoggerFactory; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.stereotype.Component; | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  | 
|---|
|  |  |  | import javax.servlet.http.HttpServletRequest; | 
|---|
|  |  |  | import java.lang.reflect.InvocationTargetException; | 
|---|
|  |  |  | import java.lang.reflect.Method; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.EnumSet; | 
|---|
|  |  |  | import java.util.Map; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import static org.reflections.Reflections.log; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 上报事件类型(eventType): | 
|---|
|  |  |  | 
|---|
|  |  |  | *  robot_reach:机器人到达工作站。 | 
|---|
|  |  |  | *  weight:称重事件回调。 | 
|---|
|  |  |  | *  rfid:RFID识别事件回调。 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * <p> | 
|---|
|  |  |  | * 任务状态(status): | 
|---|
|  |  |  | *  success:成功。 | 
|---|
|  |  |  | *  fail:失败。 | 
|---|
|  |  |  | 
|---|
|  |  |  | @RestController | 
|---|
|  |  |  | @RequestMapping("/agv") | 
|---|
|  |  |  | public class AgvOpenController extends BaseController { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static final Logger log = LoggerFactory.getLogger(AgvMobileController.class); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | AgvWrkMastService agvWrkMastService; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @PostMapping("/task/event/status") | 
|---|
|  |  |  | @AppAuth(memo = "ESS任务回调") | 
|---|
|  |  |  | public R taskEventStaus(@RequestBody AgvTaskCallBackParam param, HttpServletRequest request){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public R taskEventStaus(@RequestBody AgvTaskCallBackParam param, HttpServletRequest request) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //save api log (appkey 后续添加) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | R r = new R(0, "成功"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | AppAuthUtil.auth("",param, request); | 
|---|
|  |  |  | AppAuthUtil.auth("", param, request); | 
|---|
|  |  |  | int wrkNo = Integer.parseInt(param.getTaskCode()); | 
|---|
|  |  |  | if(wrkNo < 0){ | 
|---|
|  |  |  | if (wrkNo < 0) { | 
|---|
|  |  |  | wrkNo = -wrkNo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("wrk_no", wrkNo)); | 
|---|
|  |  |  | if(Cools.isEmpty(agvWrkMast)){ | 
|---|
|  |  |  | agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode",param.getPodCode())); | 
|---|
|  |  |  | if (Cools.isEmpty(agvWrkMast)){ | 
|---|
|  |  |  | if (Cools.isEmpty(agvWrkMast)) { | 
|---|
|  |  |  | agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode", param.getPodCode())); | 
|---|
|  |  |  | if (Cools.isEmpty(agvWrkMast)) { | 
|---|
|  |  |  | r = R.error("任务编号错误"); | 
|---|
|  |  |  | logPost(param,JSONObject.toJSONString(r),false); | 
|---|
|  |  |  | logPost(param, JSONObject.toJSONString(r), false); | 
|---|
|  |  |  | return r; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (agvWrkMast.getIoType().equals(121)){ | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | if (agvWrkMast.getWrkSts().equals(12L)){ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if (!Cools.isEmpty(agvWrkMast.getBarcode()) && !Cools.isEmpty(param.getPodCode())) { | 
|---|
|  |  |  | if (!agvWrkMast.getBarcode().equals(param.getPodCode())) { | 
|---|
|  |  |  | log.info("AGV回调的返回的托盘码和工作档托盘不一致,{}{}", agvWrkMast.getBarcode(), param.getPodCode()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (agvWrkMast.getIoType().equals(121)) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if (agvWrkMast.getWrkSts().equals(12L)) { | 
|---|
|  |  |  | WrkMastExecute wrkMastExecute = wrkMastExecuteService.selectOne(new EntityWrapper<WrkMastExecute>().eq("wrk_no", wrkNo)); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMastExecute) || wrkMastExecute.getWrkSts()!=1){ | 
|---|
|  |  |  | r = R.error("任务状态WrkSts参数有误,WrkSts:"+wrkMastExecute.getWrkSts$()); | 
|---|
|  |  |  | logPost(param,"任务状态WrkSts参数有误,WrkSts:"+wrkMastExecute.getWrkSts$()+JSONObject.toJSONString(r),false); | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMastExecute) || wrkMastExecute.getWrkSts() != 1) { | 
|---|
|  |  |  | r = R.error("任务状态WrkSts参数有误,WrkSts:" + wrkMastExecute.getWrkSts$()); | 
|---|
|  |  |  | logPost(param, "任务状态WrkSts参数有误,WrkSts:" + wrkMastExecute.getWrkSts$() + JSONObject.toJSONString(r), false); | 
|---|
|  |  |  | return r; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | wrkMastExecute.setWrkSts(wrkMastExecute.getWrkStsCode()); | 
|---|
|  |  |  | wrkMastExecuteService.updateById(wrkMastExecute); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | r = R.error("任务异常"); | 
|---|
|  |  |  | logPost(param,JSONObject.toJSONString(r),false); | 
|---|
|  |  |  | logPost(param, JSONObject.toJSONString(r), false); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return r; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | r = R.error(""+e.getMessage()); | 
|---|
|  |  |  | logPost(param,JSONObject.toJSONString(r),false); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | r = R.error("" + e.getMessage()); | 
|---|
|  |  |  | logPost(param, JSONObject.toJSONString(r), false); | 
|---|
|  |  |  | return r; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | if(agvWrkMast.getWrkSts() >= 205){ | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | if (agvWrkMast.getWrkSts() >= 205) { | 
|---|
|  |  |  | r = R.error("当前任务已完成"); | 
|---|
|  |  |  | logPost(param,JSONObject.toJSONString(r),false); | 
|---|
|  |  |  | logPost(param, JSONObject.toJSONString(r), false); | 
|---|
|  |  |  | return r; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | Class<AgvTask> clz = AgvTask.class; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | Method method = clz.getDeclaredMethod("success", AgvWrkMast.class, AgvTaskCallBackParam.class); | 
|---|
|  |  |  | method.invoke(agvTask,agvWrkMast,param); | 
|---|
|  |  |  | method.invoke(agvTask, agvWrkMast, param); | 
|---|
|  |  |  | } catch (NoSuchMethodException e) { | 
|---|
|  |  |  | r = R.error("任务状态status参数有误"); | 
|---|
|  |  |  | logPost(param,JSONObject.toJSONString(r),false); | 
|---|
|  |  |  | logPost(param, JSONObject.toJSONString(r), false); | 
|---|
|  |  |  | return r; | 
|---|
|  |  |  | } catch (InvocationTargetException e) { | 
|---|
|  |  |  | log.error(e.getMessage()); | 
|---|
|  |  |  | r = R.error(""+e.getMessage()); | 
|---|
|  |  |  | logPost(param,JSONObject.toJSONString(r),false); | 
|---|
|  |  |  | r = R.error("" + e.getMessage()); | 
|---|
|  |  |  | logPost(param, JSONObject.toJSONString(r), false); | 
|---|
|  |  |  | return r; | 
|---|
|  |  |  | } catch (IllegalAccessException e) { | 
|---|
|  |  |  | log.error(e.getMessage()); | 
|---|
|  |  |  | r = R.error(""+e.getMessage()); | 
|---|
|  |  |  | logPost(param,JSONObject.toJSONString(r),false); | 
|---|
|  |  |  | r = R.error("" + e.getMessage()); | 
|---|
|  |  |  | logPost(param, JSONObject.toJSONString(r), false); | 
|---|
|  |  |  | return r; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | logPost(param,JSONObject.toJSONString(r),true); | 
|---|
|  |  |  | logPost(param, JSONObject.toJSONString(r), true); | 
|---|
|  |  |  | return r; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @PostMapping("/conveyor/loadContainerFinish ") | 
|---|
|  |  |  | @AppAuth(memo = "取货架完成通知") | 
|---|
|  |  |  | public R loadContainerFinish(@RequestBody Map<String,Object> params){ | 
|---|
|  |  |  | public R loadContainerFinish(@RequestBody Map<String, Object> params) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return R.ok(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void logPost( AgvTaskCallBackParam param,String response,boolean success){ | 
|---|
|  |  |  | private void logPost(AgvTaskCallBackParam param, String response, boolean success) { | 
|---|
|  |  |  | apiLogService.save( | 
|---|
|  |  |  | "ESS任务回调", | 
|---|
|  |  |  | "/phyzwms/agv/task/event/status", | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | enum AgvTask{ | 
|---|
|  |  |  | enum AgvTask { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 上报任务完成 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | end{ | 
|---|
|  |  |  | end { | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改AGV工作档的工作状态为205.工作完成 | 
|---|
|  |  |  | agvWrkMast.setWrkSts(205L); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //出库任务 101.出库 || 103.拣料出库 || 107.盘点出库 | 
|---|
|  |  |  | if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103 || agvWrkMast.getIoType() == 107){ | 
|---|
|  |  |  | //修改出库站点状态 | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | if (agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103 || agvWrkMast.getIoType() == 107) { | 
|---|
|  |  |  | AgvBasDevp byDevNo = agvBasDevpService.getByDevNo(agvWrkMast.getLocNo()); | 
|---|
|  |  |  | if (byDevNo != null) { | 
|---|
|  |  |  | log.info("出库任务进入站点===>>站点码:{},站点状态{}", byDevNo.getDevNo(), byDevNo.getLocSts()); | 
|---|
|  |  |  | //修改出库站点状态 | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(), "F", agvWrkMast.getBarcode(), agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //出库任务 110.空板出库 | 
|---|
|  |  |  | if(agvWrkMast.getIoType() == 110){ | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | if (agvWrkMast.getIoType() == 110) { | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(), "F", agvWrkMast.getBarcode(), agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | agvWrkMast.setWrkSts(206L); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | agvWrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | agvWrkMastService.updateById(agvWrkMast); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 任务开始 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | start{ | 
|---|
|  |  |  | start { | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { | 
|---|
|  |  |  | //修改AGV工作档的工作状态为203.任务开始 | 
|---|
|  |  |  | agvWrkMast.setWrkSts(203L); | 
|---|
|  |  |  | agvWrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | agvWrkMast.setPdcType(param.getRobotCode()); | 
|---|
|  |  |  | agvWrkMastService.updateById(agvWrkMast); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 走出储位状态 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | outbin{ | 
|---|
|  |  |  | outbin { | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | switch(agvWrkMast.getIoType()) { | 
|---|
|  |  |  | switch (agvWrkMast.getIoType()) { | 
|---|
|  |  |  | //入库任务 | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | // 空板入库 | 
|---|
|  |  |  | // 空板入库 | 
|---|
|  |  |  | case 10: | 
|---|
|  |  |  | // 拣料入库任务 | 
|---|
|  |  |  | // 拣料入库任务 | 
|---|
|  |  |  | case 53: | 
|---|
|  |  |  | // 盘点再入库 | 
|---|
|  |  |  | // 站点退回 | 
|---|
|  |  |  | case 58: | 
|---|
|  |  |  | // 盘点再入库 | 
|---|
|  |  |  | case 57: | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",null); | 
|---|
|  |  |  | AgvBasDevp byDevNo = agvBasDevpService.getByDevNo(agvWrkMast.getSourceLocNo()); | 
|---|
|  |  |  | String locSts = "O"; | 
|---|
|  |  |  | if (byDevNo != null) { | 
|---|
|  |  |  | assert log != null; | 
|---|
|  |  |  | //                        if (!Cools.isEmpty(agvWrkMast.getBarcode())) { | 
|---|
|  |  |  | //                            AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("barcode", agvWrkMast.getBarcode())); | 
|---|
|  |  |  | //                            if (!Cools.isEmpty(agvBasDevp) && agvBasDevp.getLocSts().equals("F") && !agvBasDevp.getDevNo().equals(byDevNo.getDevNo())) { | 
|---|
|  |  |  | //                                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvBasDevp.getDevNo(), locSts, "", null); | 
|---|
|  |  |  | //                            } | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | log.info("料架离开时当前站点状态:{},{}", byDevNo.getDevNo(), byDevNo.getLocSts()); | 
|---|
|  |  |  | if ("S".equals(byDevNo.getLocSts()) || "F".equals(byDevNo.getLocSts())) { | 
|---|
|  |  |  | log.info("料架离开时当前站点状态保持不变1:{},{}", byDevNo.getDevNo(), byDevNo.getLocSts()); | 
|---|
|  |  |  | locSts = byDevNo.getLocSts(); | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(), locSts, byDevNo.getBarcode(), null); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | log.info("料架离开时当前站点状态保持不变2:{},{}", byDevNo.getDevNo(), byDevNo.getLocSts()); | 
|---|
|  |  |  | locSts = "O"; | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(), locSts, "", null); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (agvWrkMast.getIoType() == 108 || agvWrkMast.getIoType() == 114) { | 
|---|
|  |  |  | //更新库存明细 | 
|---|
|  |  |  | agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(), agvWrkMast.getLocNo(), agvWrkMast.getAppeUser()); | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(), "O", "", agvWrkMast.getWhsType().shortValue(), "", (short) 0); | 
|---|
|  |  |  | } else if (agvWrkMast.getIoType() == 109 && !agvWrkMast.getSourceLocNo().substring(0, 2).equals("DB")) { | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(), "O", "", agvWrkMast.getWhsType().shortValue(), "", (short) 0); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //if(agvWrkMast.getIoType() == 1 || agvWrkMast.getIoType() == 53 || agvWrkMast.getIoType() == 57 || agvWrkMast.getIoType() == 10){ | 
|---|
|  |  |  | //    //修改源站点状态为O.空,以及解绑托盘条码 | 
|---|
|  |  |  | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改AGV工作档的工作状态为203.RCS放货中 | 
|---|
|  |  |  | agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),204); | 
|---|
|  |  |  | agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(), 204); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 上报放箱状态 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | cancel{ | 
|---|
|  |  |  | cancel { | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | apply{ | 
|---|
|  |  |  | apply { | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | AgvWrkDetlLogService agvWrkDetlLogService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @PostConstruct | 
|---|
|  |  |  | public void postConstruct(){ | 
|---|
|  |  |  | for(AgvTask task : EnumSet.allOf(AgvTask.class)){ | 
|---|
|  |  |  | public void postConstruct() { | 
|---|
|  |  |  | for (AgvTask task : EnumSet.allOf(AgvTask.class)) { | 
|---|
|  |  |  | task.setAgvBasDevpService(agvBasDevpService); | 
|---|
|  |  |  | task.setAgvLocDetlService(agvLocDetlService); | 
|---|
|  |  |  | task.setAgvLocMastService(agvLocMastService); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void main(String[] args) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | String s = null; | 
|---|
|  |  |  | System.out.println(s.equals("1")); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|