Browse Source

广告新增接口

chenyongxing 7 years ago
parent
commit
c6c6598b69

+ 2 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wlyy/patient/WlyyPatientContants.java

@ -13,6 +13,8 @@ public class WlyyPatientContants {
        public static final String api_queryPage="queryPage";
        public static final String api_getList="getList";
        public static final String api_getListByPatientCode="getListByPatientCode";
        public static final String api_getListByHttp="getListByHttp";
        public static final String api_getListByIp="getListByIp";
        public static final String message_success_update="advertisement update success";
        public static final String message_success_delete="advertisement delete success";

+ 8 - 1
svr/svr-wlyy/src/main/java/com/yihu/jw/util/AddressUtils.java

@ -11,6 +11,12 @@ import java.net.URL;
 */
public class AddressUtils {
    public String getAddresses(String ip)
            throws UnsupportedEncodingException {
        return getAddresses(ip,"utf-8");
    }
    /**
     * 返回"0" 为无效ip,局域网测试
     * "中国-西南-四川省-成都市- -电信"  (没有值,中间用空格隔开  country-area-region-city-county-isp)
@ -24,6 +30,7 @@ public class AddressUtils {
        // 这里调用pconline的接口
        String urlStr = "http://ip.taobao.com/service/getIpInfo.php";
        // 从http://whois.pconline.com.cn取得IP所在的省市区信息
        content = "ip="+content;
        String returnStr = this.getResult(urlStr, content, encodingString);
        if (returnStr != null) {
            // 处理返回的省市区信息
@ -203,7 +210,7 @@ public class AddressUtils {
        String ip = "219.136.134.157";
        String address = "";
        try {
            address = addressUtils.getAddresses("ip=" + ip, "utf-8");
            address = addressUtils.getAddresses(ip);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

+ 47 - 0
svr/svr-wlyy/src/main/java/com/yihu/jw/util/CusAccessObjectUtil.java

@ -0,0 +1,47 @@
package com.yihu.jw.util;
import javax.servlet.http.HttpServletRequest;
/**
 * 自定义访问对象工具类
 *
 * 获取对象的IP地址等信息
 * @author X-rapido
 *
 */
public class CusAccessObjectUtil {
    /**
     * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址,
     *
     * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
     * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。
     *
     * 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130,
     * 192.168.1.100
     *
     * 用户真实IP为: 192.168.1.110
     *
     * @param request
     * @return
     */
    public static String getIpAddress(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
}

+ 23 - 2
svr/svr-wlyy/src/main/java/com/yihu/jw/wlyy/controller/patient/AdvertisementControlelr.java

@ -130,9 +130,30 @@ public class AdvertisementControlelr extends EnvelopRestController {
    @ApiOperation(value = "根据患者code获取广告")
    public Envelop getListByPatientCode(
            @ApiParam(name="patientCode")
            @RequestParam(value="") String patientCode){
        List<WlyyAdvertisement> advertisements = advertisementService.getListByPatientCode(patientCode);
            @RequestParam(value="patientCode") String patientCode,
            HttpServletRequest request
            ){
        List<WlyyAdvertisement> advertisements = advertisementService.getListByPatientCode(patientCode,request);
        return Envelop.getSuccessList(WlyyPatientContants.Advertisement.message_success_find_functions,advertisements);
    }
    @GetMapping(value= WlyyPatientContants.Advertisement.api_getListByHttp)
    @ApiOperation(value = "根据患者code地区(通过http判断)获取广告")
    public Envelop getListByHttp(HttpServletRequest request){
        List<WlyyAdvertisement> advertisements = advertisementService.getByHttp(request);
        return Envelop.getSuccess(WlyyPatientContants.Advertisement.message_success_find_functions,advertisements);
    }
    /**
     * 供网关调用
     * @param ipAddress
     * @return
     */
    @GetMapping(value= WlyyPatientContants.Advertisement.api_getListByIp)
    @ApiOperation(value = "根据患者ip地址(供网关调用)")
    public Envelop getListByIp(@RequestParam(value="ipAddress") String ipAddress){
        List<WlyyAdvertisement> advertisements = advertisementService.getListByIp(ipAddress);
        return Envelop.getSuccess(WlyyPatientContants.Advertisement.message_success_find_functions,advertisements);
    }
}

+ 78 - 20
svr/svr-wlyy/src/main/java/com/yihu/jw/wlyy/service/patient/AdvertisementService.java

@ -4,10 +4,11 @@ import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.jw.restmodel.common.CommonContants;
import com.yihu.jw.restmodel.exception.ApiException;
import com.yihu.jw.restmodel.wlyy.patient.WlyyPatientContants;
import com.yihu.jw.util.AddressUtils;
import com.yihu.jw.util.CusAccessObjectUtil;
import com.yihu.jw.wlyy.dao.patient.AdvertisementDao;
import com.yihu.jw.wlyy.entity.BaseSaas;
import com.yihu.jw.wlyy.entity.agreement.WlyySignFamily;
import com.yihu.jw.wlyy.entity.patient.BasePatient;
import com.yihu.jw.wlyy.entity.patient.WlyyAdvertisement;
import com.yihu.jw.wlyy.service.BaseSaasService;
import com.yihu.jw.wlyy.service.agreement.WlyySignFamilyService;
@ -16,6 +17,8 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.persistence.Transient;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.List;
@ -113,7 +116,13 @@ public class AdvertisementService extends BaseJpaService<WlyyAdvertisement, Adve
        advertisementDao.save(advertisement);
    }
    public List<WlyyAdvertisement> getListByPatientCode(String patientCode) {
    /**
     * 根据患者code查找广告
     * @param patientCode
     * @param request
     * @return
     */
    public List<WlyyAdvertisement> getListByPatientCode(String patientCode, HttpServletRequest request) {
        List<WlyyAdvertisement> advertisements = null;
        //查找已签约的,根据签约的saasId查找地区,获得广告
        List<WlyySignFamily> signs =  signFamilyService.findByPatientCode(patientCode,1);
@ -128,24 +137,8 @@ public class AdvertisementService extends BaseJpaService<WlyyAdvertisement, Adve
                }
            }
        }
        //如果广告为空,则查询患者的地址,根据患者的地址显示广告
        BasePatient patient = patientService.findByCode(patientCode);
        if(patient!=null){//patient为空时,查找默认广告
            String cityName = patient.getCityName();
            //根据cityName查找saas
            if(!StringUtils.isEmpty(cityName)){
                BaseSaas saas = saasService.findByName(cityName);
                if(saas!=null){
                    String saasCode = saas.getCode();
                    advertisements = getListBySaasCode(saasCode);
                }
            }
        }
        //如果查询出的广告为空,则查询默认广告
        if(advertisements==null){
            advertisements = getDefaultList();
        }
        //如果未签约或者通过签约未获取到广告,则根据http获取广告
        advertisements = getByHttp(request);
        return advertisements;
    }
@ -165,4 +158,69 @@ public class AdvertisementService extends BaseJpaService<WlyyAdvertisement, Adve
    private List<WlyyAdvertisement> getDefaultList(){
        return advertisementDao.getDefaultList();
    }
    /**
     * 通过用户的HttpServletRequest,判断显示的广告
     * @param request
     * @return
     */
    public  List<WlyyAdvertisement> getByHttp(HttpServletRequest request){
        String ipAddress = CusAccessObjectUtil.getIpAddress(request);
        AddressUtils addressUtils = new AddressUtils();
        try {
            String address = addressUtils.getAddresses(ipAddress);//"中国-西南-四川省-成都市- -电信"  (没有值,中间用空格隔开  country-area-region-city-county-isp)或者返回0
            String[] addresses = address.split("-");
            if(addresses.length<6){
                return  getDefaultList();
            }else{
                String cityName = addresses[3];
                BaseSaas saas = saasService.findByName(cityName);//成都市
                if(saas ==null){
                    cityName = cityName.substring(0,cityName.length()-1);//成都
                    saas = saasService.findByName(cityName);
                }
                if(saas==null){//如果还是为空,则展示默认广告
                    return  getDefaultList();
                }
                String saasCode = saas.getCode();
                return getListBySaasCode(saasCode);
            }
        } catch (UnsupportedEncodingException e) {//解析ip失败,展示默认广告
            return  getDefaultList();
        }
    }
    /**
     * 通过ip定位地址,展示广告的广告(供网关调用)
     * @param ipaddress
     * @return
     */
    public  List<WlyyAdvertisement> getListByIp(String ipaddress){
        try {
            AddressUtils addressUtils = new AddressUtils();
            String address = addressUtils.getAddresses(ipaddress);
            String[] addresses = address.split("-");
            if(addresses.length<6){
                return  getDefaultList();
            }else{
                String cityName = addresses[3];
                BaseSaas saas = saasService.findByName(cityName);//成都市
                if(saas ==null){
                    cityName = cityName.substring(0,cityName.length()-1);//成都
                    saas = saasService.findByName(cityName);
                }
                if(saas==null){//如果还是为空,则展示默认广告
                    return  getDefaultList();
                }
                String saasCode = saas.getCode();
                return getListBySaasCode(saasCode);
            }
        } catch (UnsupportedEncodingException e) {//解析ip失败,展示默认广告
            return  getDefaultList();
        }
    }
}

+ 2 - 0
web-gateway/src/main/java/com/yihu/jw/commnon/wlyy/PatientContants.java

@ -13,5 +13,7 @@ public class PatientContants {
        public static final String api_queryPage="queryPage";
        public static final String api_getList="getList";
        public static final String api_getListByPatientCode="getListByPatientCode";
        public static final String api_getListByHttp="getListByHttp";
        public static final String api_getListByIp="getListByIp";
    }
}

+ 13 - 1
web-gateway/src/main/java/com/yihu/jw/controller/wlyy/patient/AdvertisementControlelr.java

@ -4,6 +4,7 @@ import com.yihu.jw.commnon.wlyy.PatientContants;
import com.yihu.jw.fegin.wlyy.patient.AdvertisementFegin;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.restmodel.common.EnvelopRestController;
import com.yihu.jw.util.CusAccessObjectUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -101,7 +102,18 @@ public class AdvertisementControlelr extends EnvelopRestController {
    @ApiOperation(value = "根据患者code获取广告")
    public Envelop getListByPatientCode(
            @ApiParam(name="patientCode")
            @RequestParam(value="") String patientCode){
            @RequestParam(value="patientCode") String patientCode,
            HttpServletRequest request
    ){
        return advertisementFegin.getListByPatientCode(patientCode);
    }
    @GetMapping(value =PatientContants.Advertisement.api_getListByHttp)
    @ApiOperation(value = "根据患者http获取广告")
    public Envelop getListByHttp(
            HttpServletRequest request
    ){
        String ipAddress = CusAccessObjectUtil.getIpAddress(request);
        return advertisementFegin.getListByIp(ipAddress);
    }
}

+ 8 - 1
web-gateway/src/main/java/com/yihu/jw/fegin/fallbackfactory/wlyy/patient/AdvertisementFeginFallbackFactory.java

@ -48,9 +48,16 @@ public class AdvertisementFeginFallbackFactory implements FallbackFactory<Advert
            }
            @Override
            public Envelop getListByPatientCode(String patientCode) {
            public Envelop getListByPatientCode(@RequestParam(value = "patientCode") String patientCode) {
                return null;
            }
            @Override
            public Envelop getListByIp(@RequestParam(value = "ipAddress") String ipAddress) {
                return null;
            }
        };
    }
}

+ 5 - 1
web-gateway/src/main/java/com/yihu/jw/fegin/wlyy/patient/AdvertisementFegin.java

@ -45,5 +45,9 @@ public interface AdvertisementFegin {
            @RequestParam(value = "sorts", required = false) String sorts);
    @GetMapping(value= WlyyPatientContants.Advertisement.api_getListByPatientCode)
    Envelop getListByPatientCode(String patientCode);
    Envelop getListByPatientCode(@RequestParam(value="patientCode")String patientCode);
    @GetMapping(value= WlyyPatientContants.Advertisement.api_getListByIp)
    Envelop getListByIp(@RequestParam(value="ipAddress") String ipAddress);
}

+ 47 - 0
web-gateway/src/main/java/com/yihu/jw/util/CusAccessObjectUtil.java

@ -0,0 +1,47 @@
package com.yihu.jw.util;
import javax.servlet.http.HttpServletRequest;
/**
 * 自定义访问对象工具类
 *
 * 获取对象的IP地址等信息
 * @author X-rapido
 *
 */
public class CusAccessObjectUtil {
    /**
     * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址,
     *
     * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
     * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。
     *
     * 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130,
     * 192.168.1.100
     *
     * 用户真实IP为: 192.168.1.110
     *
     * @param request
     * @return
     */
    public static String getIpAddress(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
}