Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/rfid/action/RssiRecordAction.java =================================================================== diff -u -r35162 -r35173 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/rfid/action/RssiRecordAction.java (.../RssiRecordAction.java) (revision 35162) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/rfid/action/RssiRecordAction.java (.../RssiRecordAction.java) (revision 35173) @@ -1,12 +1,21 @@ package com.forgon.disinfectsystem.rfid.action; + +import javax.servlet.http.HttpServletRequest; + import net.sf.json.JSONObject; + import org.apache.commons.lang.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + import com.forgon.disinfectsystem.entity.basedatamanager.rfid.RssiRecord; import com.forgon.disinfectsystem.rfid.service.RssiRecordManager; +import com.forgon.exception.SystemException; import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.hibernate.ObjectDao; @@ -20,8 +29,6 @@ @Namespace(value = "/disinfectSystem") @Action(value = "rssiRecordAction") public class RssiRecordAction implements ModelDriven, Preparable{ - private RssiRecord rssiRecord; - private ObjectDao objectDao; private RssiRecordManager rssiRecordManager; @@ -34,25 +41,27 @@ } @Override public void prepare() throws Exception { - String id = StrutsParamUtils.getPraramValue("id", ""); - if(StringUtils.isNotBlank(id) && !id.equals("0")){ - rssiRecord = (RssiRecord)objectDao.getById(RssiRecord.class.getSimpleName(), id); - }else{ - rssiRecord = new RssiRecord(); - } + } @Override public RssiRecord getModel() { - return rssiRecord; + return null; } /** * 保存修改rssiRecord */ public void saveRssiRecord(){ JSONObject outputJson = null; try { - rssiRecord.setIp(StrutsParamUtils.getPraramValue("ip", null)); + String id = StrutsParamUtils.getPraramValue("id", ""); + RssiRecord rssiRecord = null; + if(StringUtils.isNotBlank(id) && !id.equals("0")){ + rssiRecord = (RssiRecord)objectDao.getById(RssiRecord.class.getSimpleName(), id); + }else{ + rssiRecord = new RssiRecord(); + } + rssiRecord.setIp(getRemoteAddr(null)); rssiRecord.setRssiValue(StrutsParamUtils.getPraramValue("rssiValue", null)); rssiRecordManager.saveOrUpdate(rssiRecord); outputJson = JSONUtil.buildJsonObject(true); @@ -68,12 +77,35 @@ public void loadRssiRecordByIp(){ JSONObject result = null; try { - String ip = StrutsParamUtils.getPraramValue("ip", null); - result = rssiRecordManager.loadRssiRecordJsonByIp(ip); + result = rssiRecordManager.loadRssiRecordJsonByIp(getRemoteAddr(null)); } catch (Exception e) { e.printStackTrace(); result = JSONUtil.buildJsonObject(false, e.getMessage()); } StrutsResponseUtils.output(result); } + /** + * 获取远程ip + * @return 如果是本机 则返回0:0:0:0:0:0:0:1 + */ + private String getRemoteAddr(HttpServletRequest request){ + if(request == null){ + //取得request(通过提交登录请求的方式才可能取到request,测试用例模拟登录的不能取到request) + RequestAttributes requestAttributes = null; + try{ + requestAttributes = RequestContextHolder.getRequestAttributes(); + }catch(Exception e){ + e.printStackTrace(); + } + if(requestAttributes != null){ + request = ((ServletRequestAttributes)requestAttributes).getRequest(); + } + } + if(request == null){ + throw new SystemException("获取不到HttpServletRequest"); + }else if(StringUtils.isBlank(request.getRemoteAddr())){ + throw new SystemException("获取不到ip"); + } + return request.getRemoteAddr(); + } }