huangzhiyong 6 سال پیش
والد
کامیت
f7268aeac5
14فایلهای تغییر یافته به همراه315 افزوده شده و 185 حذف شده
  1. 1 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java
  2. 4 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/health/house/HealthyHouseMapping.java
  3. 5 0
      gateway/ag-basic/pom.xml
  4. 115 120
      gateway/ag-basic/src/main/java/com/yihu/jw/gateway/filter/BasicZuulFilter.java
  5. 3 3
      gateway/ag-basic/src/main/resources/application.yml
  6. 15 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java
  7. 0 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
  8. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WeChatQrcodeController.java
  9. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WechatController.java
  10. 139 40
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/facilities/FacilitiesController.java
  11. 13 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/facilities/FacilitiesServerController.java
  12. 1 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/user/FacilityUsedRecordController.java
  13. 11 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/model/user/FacilityUsedRecord.java
  14. 6 19
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/FacilityUsedRecordService.java

+ 1 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java

@ -150,6 +150,7 @@ public class BaseRequestMapping {
     */
    public static class WeChat extends Basic {
        public static final String PREFIX  = "/wechat";
        public static final String wechat_base ="/wechatBase";
        public static final String api_success ="success";
        public static final String getWechatInfos ="/getWechatInfos";
    }

+ 4 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/health/house/HealthyHouseMapping.java

@ -54,6 +54,9 @@ public class HealthyHouseMapping {
            public static final String GET_FACILITIELIST = "/list/getAppFacilities";
            public static final String GET_ALL_FACILITIELISTS_COUNT = "/list/getAllFacilitiesCount";
            public static final String UPDATE_FACILITIES_AND_RELATION = "/update/facilitieAndRelations";
        }
        //设施服务
@ -65,6 +68,7 @@ public class HealthyHouseMapping {
            public static final String LIST = "/list/facilitieServers";
            public static final String GET_FACILITIESERVERS_BY_ID = "/getFacilitieServersById";
            public static final String GET_FACILITIESERVERS_BY_FIELD = "/getFacilitieServersByField";
            public static final String LIST_FACILITIESERVERS = "/list/listFacilitieServers";
        }
        //意见反馈

+ 5 - 0
gateway/ag-basic/pom.xml

@ -100,6 +100,11 @@
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-rest-model</artifactId>
        </dependency>
    </dependencies>
    <build>

+ 115 - 120
gateway/ag-basic/src/main/java/com/yihu/jw/gateway/filter/BasicZuulFilter.java

@ -1,91 +1,86 @@
//package com.yihu.jw.gateway.filter;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.netflix.zuul.ZuulFilter;
//import com.netflix.zuul.context.RequestContext;
//import com.yihu.jw.restmodel.web.Envelop;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Primary;
//import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
//import org.springframework.http.HttpStatus;
//import org.springframework.security.oauth2.common.OAuth2AccessToken;
//import org.springframework.security.oauth2.provider.token.TokenStore;
//import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
//import org.springframework.stereotype.Component;
//
//import javax.servlet.http.HttpServletRequest;
//import java.io.IOException;
//
///**
// * Created by progr1mmer on 2017/12/27
// */
//@Component
//public class BasicZuulFilter extends ZuulFilter {
//
//    private static final Logger logger = LoggerFactory.getLogger(BasicZuulFilter.class);
//    private static final String ACCESS_TOKEN_PARAMETER = "token";
//
//    @Autowired
//    private ObjectMapper objectMapper;
//    @Autowired
//    private TokenStore tokenStore;
//
//    @Override
//    public String filterType() {
//        return "pre";
//    }
//
//    @Override
//    public int filterOrder() {
//        return 0;
//    }
//
//    @Override
//    public boolean shouldFilter() {
//        return true;
//    }
//
//    @Override
//    public Object run() {
//        RequestContext ctx = RequestContext.getCurrentContext();
//        HttpServletRequest request = ctx.getRequest();
//        String url = request.getRequestURI();
//        //内部微服务有不需要认证的地址请在URL上追加/open/来进行过滤,如/api/v1.0/open/**,不要在此继续追加!!!
//        if (url.contains("/authentication/")
//                || url.contains("/file/")
//                || url.contains("/open/")
//                || url.contains("/jkzl/")
//                || url.contains("/fzGateway/")
//                || url.contains("/usersOfApp")
//                || url.contains("/users/h5/handshake")
//                || url.contains("/appVersion/getAppVersion")
//                || url.contains("/messageTemplate/messageOrderPush")
//                || url.contains("/account/")) {
//            return true;
//        }
//        return this.authenticate(ctx, request, url);
//    }
//
//    private Object authenticate(RequestContext ctx, HttpServletRequest request, String path) {
//        String accessToken = this.extractToken(request);
//        if (null == accessToken) {
//            return this.forbidden(ctx, HttpStatus.FORBIDDEN.value(), "token can not be null");
//        }
//        OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(accessToken);
//        if (null == oAuth2AccessToken) {
//            return this.forbidden(ctx, HttpStatus.FORBIDDEN.value(), "invalid token");
//        }
//        if (oAuth2AccessToken.isExpired()) {
//            return this.forbidden(ctx, HttpStatus.PAYMENT_REQUIRED.value(), "expired token"); //返回402 登陆过期
//        }
package com.yihu.jw.gateway.filter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.yihu.jw.restmodel.web.Envelop;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.http.HttpStatus;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Set;
/**
 * Created by progr1mmer on 2017/12/27
 */
@Component
public class BasicZuulFilter extends ZuulFilter {
    private static final Logger logger = LoggerFactory.getLogger(BasicZuulFilter.class);
    private static final String ACCESS_TOKEN_PARAMETER = "token";
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private TokenStore tokenStore;
    @Override
    public String filterType() {
        return "pre";
    }
    @Override
    public int filterOrder() {
        return 0;
    }
    @Override
    public boolean shouldFilter() {
        return true;
    }
    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        String url = request.getRequestURI();
        //内部微服务有不需要认证的地址请在URL上追加/open/来进行过滤,如/api/v1.0/open/**,不要在此继续追加!!!
        if (url.contains("/auth/")//验证服务
                || url.contains("/wechat/")//微信
                || url.contains("/open/")) {//开发接口
            return true;
        }
        return this.authenticate(ctx, request, url);
    }
    private Object authenticate(RequestContext ctx, HttpServletRequest request, String path) {
        String accessToken = this.extractToken(request);
        if (null == accessToken) {
            return this.forbidden(ctx, HttpStatus.FORBIDDEN.value(), "token can not be null");
        }
        OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(accessToken);
        if (null == oAuth2AccessToken) {
            return this.forbidden(ctx, HttpStatus.FORBIDDEN.value(), "invalid token");
        }
        if (oAuth2AccessToken.isExpired()) {
            return this.forbidden(ctx, HttpStatus.PAYMENT_REQUIRED.value(), "expired token"); //返回402 登陆过期
        }
//        //将token的认证信息附加到请求中,转发给下游微服务
//        /*OAuth2Authentication auth = tokenStore.readAuthentication(accessToken);
//        ctx.addZuulRequestHeader("x-auth-name", auth.getName());*/
//        OAuth2Authentication auth = tokenStore.readAuthentication(accessToken);
//        ctx.addZuulRequestHeader("x-auth-name", auth.getName());
//        //以下代码取消注释可开启Oauth2应用资源授权验证
//        /*Set<String> resourceIds = auth.getOAuth2Request().getResourceIds();
//        Set<String> resourceIds = auth.getOAuth2Request().getResourceIds();
//        for (String resourceId : resourceIds) {
//            if (resourceId.equals("*")) {
//                return true;
@ -99,37 +94,37 @@
//                return true;
//            }
//        }
//        return this.forbidden(ctx, HttpStatus.FORBIDDEN.value(), "invalid token does not contain request resource " + path);*/
//        return true;
//    }
//
//    private String extractToken(HttpServletRequest request) {
//        String accessToken = request.getHeader(ACCESS_TOKEN_PARAMETER);
//        if (null == accessToken) {
//            accessToken = request.getParameter(ACCESS_TOKEN_PARAMETER);
//        }
//        return accessToken;
//    }
//
//    private Object forbidden(RequestContext requestContext, int status, String errorMsg) {
//        requestContext.setSendZuulResponse(false);
//        Envelop envelop = new Envelop();
//        envelop.setMessage(errorMsg);
//        envelop.setStatus(status);
//        try {
//            //requestContext.setResponseStatusCode(status);
//            requestContext.getResponse().getWriter().write(objectMapper.writeValueAsString(envelop));
//        } catch (IOException e) {
//            requestContext.setResponseStatusCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
//            logger.error(e.getMessage());
//        }
//        return false;
//    }
//
//    @Bean
//    @Primary
//    public RedisTokenStore redisTokenStore(JedisConnectionFactory jedisConnectionFactory) {
//        return new RedisTokenStore(jedisConnectionFactory);
//    }
//
//}
//        return this.forbidden(ctx, HttpStatus.FORBIDDEN.value(), "invalid token does not contain request resource " + path);
        return true;
    }
    private String extractToken(HttpServletRequest request) {
        String accessToken = request.getHeader(ACCESS_TOKEN_PARAMETER);
        if (null == accessToken) {
            accessToken = request.getParameter(ACCESS_TOKEN_PARAMETER);
        }
        return accessToken;
    }
    private Object forbidden(RequestContext requestContext, int status, String errorMsg) {
        requestContext.setSendZuulResponse(false);
        Envelop envelop = new Envelop();
        envelop.setMessage(errorMsg);
        envelop.setStatus(status);
        try {
            //requestContext.setResponseStatusCode(status);
            requestContext.getResponse().getWriter().write(objectMapper.writeValueAsString(envelop));
        } catch (IOException e) {
            requestContext.setResponseStatusCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
            logger.error(e.getMessage());
        }
        return false;
    }
    @Bean
    @Primary
    public RedisTokenStore redisTokenStore(JedisConnectionFactory jedisConnectionFactory) {
        return new RedisTokenStore(jedisConnectionFactory);
    }
}

+ 3 - 3
gateway/ag-basic/src/main/resources/application.yml

@ -34,9 +34,9 @@ zuul:
    svr-base:
      path: /base/**
      serviceId: svr-base
    demo:
      path: /baidu/**
      url: https://www.baidu.com
    svr-authentication:
      path: /auth/**
      serviceId: svr-authentication
---
spring:

+ 15 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java

@ -5,6 +5,7 @@ import com.yihu.jw.security.model.WlyyUserDetails;
import com.yihu.jw.security.model.WlyyUserSimple;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.security.core.GrantedAuthority;
@ -241,4 +242,18 @@ public class WlyyUserDetailsService extends JdbcDaoSupport implements UserDetail
        return loginType;
    }
    public boolean setRolePhth(String loginType, String token, String id, RedisTemplate redisTemplate){
        if(org.apache.commons.lang.StringUtils.isBlank(loginType)||"1".equals(loginType)){ //1或默认查找user表,为平台管理员账号
        }else if("2".equals(loginType)){//2.为医生账号
        }else if("3".equals(loginType)){ //3.患者账号
        }else{
            return false;
        }
        return true;
    }
}

+ 0 - 1
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java

@ -404,5 +404,4 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        ResponseEntity<Oauth2Envelop> response = new ResponseEntity<>(authenticationFailed, headers, HttpStatus.OK);
        return response;
    }
}

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WeChatQrcodeController.java

@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.RestController;
 * Created by Trick on 2018/9/7.
 */
@RestController
@RequestMapping(BaseRequestMapping.WeChat.PREFIX)
@RequestMapping(BaseRequestMapping.WeChat.wechat_base)
@Api(value = "微信二维码", description = "微信二维码", tags = {"微信二维码服务 - 微信二维码"})
public class WeChatQrcodeController extends EnvelopRestEndpoint {

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WechatController.java

@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
 * Created by Trick on 2018/9/26.
 */
@RestController
@RequestMapping(BaseRequestMapping.WeChat.PREFIX)
@RequestMapping(BaseRequestMapping.WeChat.wechat_base)
@Api(value = "微信基础信息管理", description = "微信基础信息管理", tags = {"微信基础 - 微信基础信息管理"})
public class WechatController extends EnvelopRestEndpoint {

+ 139 - 40
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/facilities/FacilitiesController.java

@ -72,13 +72,13 @@ public class FacilitiesController extends EnvelopRestEndpoint {
        return success(facilityList, (null == facilityList) ? 0 : facilityList.size(), page, size);
    }
    @ApiOperation(value = "创建/更新(id存在)设施,包含设施与服务的关联关系")
    @ApiOperation(value = "创建设施,包含设施与服务的关联关系")
    @Transactional(rollbackFor = Exception.class)
    @PostMapping(value = HealthyHouseMapping.HealthyHouse.Facilities.CREATE)
    public ObjEnvelop<Facility> createFacilities(
            @ApiParam(name = "facility", value = "设施JSON结构")
            @RequestParam(value = "facility") String facility,
            @ApiParam(name = "facilityServerJson", value = "设施与服务关联关系")
            @ApiParam(name = "facilityServerJson", value = "设施关联的服务字符串用,号隔开")
            @RequestParam(value = "facilityServerJson") String facilityServerJson) throws IOException {
        Facility facility1 = toEntity(facility, Facility.class);
        List<Facility> facilityList = null;
@ -108,24 +108,61 @@ public class FacilitiesController extends EnvelopRestEndpoint {
            return failed("设施类别不正确,请参考系统字典:设施类别!", ObjEnvelop.class);
        }
        Facility facilityBack = facilityService.save(facility1);
        JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, FacilityServerRelation.class);
        List<FacilityServerRelation> models = objectMapper.readValue(facilityServerJson, javaType);
        if (null != models && models.size() > 0) {
            for (FacilityServerRelation facilityServerRelation : models) {
                facilityServerRelationService.save(facilityServerRelation);
                //添加设施的时候,追加改服务的使用设施数量。
                List<FacilityServer> facilityServerList = facilityServerService.findByField("code", facilityServerRelation.getServiceCode());
                for (FacilityServer facilityServer : facilityServerList) {
                    Integer num = Integer.valueOf(facilityServer.getNum()) + 1;
                    facilityServer.setNum(num.toString());
                    facilityServerService.save(facilityServer);
                }
        List<FacilityServerRelation>  facilityServerRelationList = createRelationByServerCode(facility1,facilityServerJson);
        facilityBack.setFacilityServerRelation(facilityServerRelationList);
        return success(facilityBack);
    }
    @ApiOperation(value = "更新(id存在)设施,包含设施与服务的关联关系")
    @Transactional(rollbackFor = Exception.class)
    @PostMapping(value = HealthyHouseMapping.HealthyHouse.Facilities.UPDATE_FACILITIES_AND_RELATION)
    public ObjEnvelop<Facility> updateFacilitieAndRelations(
            @ApiParam(name = "facility", value = "设施JSON结构")
            @RequestParam(value = "facility") String facility,
            @ApiParam(name = "facilityServerJson", value = "设施关联的服务字符串用,号隔开")
            @RequestParam(value = "facilityServerJson") String facilityServerJson) throws Exception {
        Facility facility1 = toEntity(facility, Facility.class);
        List<Facility> facilityList = null;
        List<Facility> faList = facilityService.findByField("id", facility1.getId());
        if (!(faList != null && faList.size() > 0)) {
            return failed("设施不存在!", ObjEnvelop.class);
        }
        if (StringUtils.isNotEmpty(facility1.getId())) {
            //删除设施,设施关联关系,设施服务使用设施数
            deleteFacilityByCode(facility1);
        }
        if (StringUtils.isEmpty(facility1.getCode())) {
            return failed("设施编码不能为空!", ObjEnvelop.class);
        } else {
            facilityList = facilityService.findByField("code", facility1.getCode());
            if (null != facilityList && facilityList.size() > 0) {
                return failed("设施编码已存在!", ObjEnvelop.class);
            }
        }
        if (StringUtils.isEmpty(facility1.getName())) {
            return failed("设施名称不能为空!", ObjEnvelop.class);
        } else {
            facilityList = facilityService.findByField("name", facility1.getName());
            if (null != facilityList && facilityList.size() > 0) {
                return failed("设施名称已存在!", ObjEnvelop.class);
            }
        }
        facilityBack.setFacilityServerRelation(models);
        if (!(facility1.getLongitude() > 0)) {
            return failed("设施经度不能为空!", ObjEnvelop.class);
        }
        if (!(facility1.getLatitude() > 0)) {
            return failed("设施纬度不能为空!", ObjEnvelop.class);
        }
        if (StringUtils.isEmpty(facility1.getCategory().toString())) {
            return failed("设施类别不正确,请参考系统字典:设施类别!", ObjEnvelop.class);
        }
        Facility facilityBack = facilityService.save(facility1);
        List<FacilityServerRelation>  facilityServerRelationList = createRelationByServerCode(facility1,facilityServerJson);
        facilityBack.setFacilityServerRelation(facilityServerRelationList);
        return success(facilityBack);
    }
    @ApiOperation(value = "获取设施")
    @GetMapping(value = HealthyHouseMapping.HealthyHouse.Facilities.GET_FACILITIES_BY_ID)
    public ObjEnvelop<Facility> getFacilitie(
@ -188,18 +225,7 @@ public class FacilitiesController extends EnvelopRestEndpoint {
        if (null == facility) {
            return failed("设施不存在!");
        }
        List<FacilityServerRelation> facilityServerRelationList = facilityServerRelationService.findByField("facilitieCode", facility.getCode());
        //通过设施与服务关系,变更设施服务使用数量
        for (FacilityServerRelation facilityServerRelation : facilityServerRelationList) {
            List<FacilityServer> facilityServiceList = facilityServerService.findByField("code", facilityServerRelation.getServiceCode());
            for (FacilityServer facilityServer : facilityServiceList) {
                Integer num = Integer.valueOf(facilityServer.getNum()) - 1;
                facilityServer.setNum(num.toString());
                facilityServerService.save(facilityServer);
            }
        }
        facilityServerRelationService.deleteByFacilitieCode(facility.getCode());
        facilityService.delete(facility);
        deleteFacilityByCode(facility);
        return success("success");
    }
@ -248,16 +274,16 @@ public class FacilitiesController extends EnvelopRestEndpoint {
    @ApiOperation(value = "设施列表导出excel")
    public void exportToExcel(
            HttpServletResponse response,
            @ApiParam(name = "filters", value = "过滤条件", required = false)@RequestParam(required = false, name = "filters") String filters,
            @ApiParam(name = "sorts", value = "排序", required = false)@RequestParam(required = false, name = "sorts") String sorts) throws ManageException {
            @ApiParam(name = "filters", value = "过滤条件", required = false) @RequestParam(required = false, name = "filters") String filters,
            @ApiParam(name = "sorts", value = "排序", required = false) @RequestParam(required = false, name = "sorts") String sorts) throws ManageException {
        //获取设施数据
        List<Facility> facilityList = null;
        try {
           facilityList = facilityService.search( filters, sorts);
            facilityList = facilityService.search(filters, sorts);
        } catch (ParseException e) {
            throw new ManageException("获取设施列表异常",e);
            throw new ManageException("获取设施列表异常", e);
        }
        facilityService.exportFacilityExcel(response,facilityList);
        facilityService.exportFacilityExcel(response, facilityList);
    }
@ -269,13 +295,13 @@ public class FacilitiesController extends EnvelopRestEndpoint {
            AExcelReader excelReader = new FacilityMsgReader();
            excelReader.read(file);
            List<FacilityMsg> dataList = excelReader.getCorrectLs();
            if(dataList.size()>0) {
                Map<String,Object> result = facilityService.batchInsertFacility(dataList);
                return ObjEnvelop.getSuccess("导入成功!",result);
            if (dataList.size() > 0) {
                Map<String, Object> result = facilityService.batchInsertFacility(dataList);
                return ObjEnvelop.getSuccess("导入成功!", result);
            }
        } catch (Exception e) {
            throw new ManageException("导入设施列表异常!",e);
            throw new ManageException("导入设施列表异常!", e);
        }
        return ObjEnvelop.getError("导入失败");
    }
@ -300,17 +326,90 @@ public class FacilitiesController extends EnvelopRestEndpoint {
        Map<String, Long> map = new HashMap<>();
        //今日使用设施数
        long countUsedFacilitieToday = facilityServerRelationService.countDistinctByFacilitieCodeAndCreateTimeBetween();
        map.put("countUsedFacilitieToday",countUsedFacilitieToday);
        map.put("countUsedFacilitieToday", countUsedFacilitieToday);
        long countAllFacilitie = facilityService.getCount("");
        map.put("countAllFacilitie",countAllFacilitie);
        map.put("countAllFacilitie", countAllFacilitie);
        //今日新增设施:false
        String todayStart = DateUtil.getStringDateShort() + " " + "00:00:00";
        String todayEnd = DateUtil.getStringDateShort() + " " + "23:59:59";
        String  filters = "createTime>=" + todayStart + ";createTime<=" + todayEnd;
        String filters = "createTime>=" + todayStart + ";createTime<=" + todayEnd;
        long countCreatedFacilitieToday = facilityService.getCount(filters);
        map.put("countCreatedFacilitieToday",countCreatedFacilitieToday);
        map.put("countCreatedFacilitieToday", countCreatedFacilitieToday);
        return ObjEnvelop.getSuccess("获取成功", map);
    }
//    @ApiOperation(value = "搜索附近的小屋", responseContainer = "List")
//    @GetMapping(value = HealthyHouseMapping.HealthyHouse.Facilities.NEARBY_FACILITY)
//    public PageEnvelop<Facility> nearbyFacility(
//            @ApiParam(name = "lng", value = "当前经度", defaultValue = "")
//            @RequestParam(value = "lng", required = false) String lng,
//            @ApiParam(name = "lat", value = "当前纬度", defaultValue = "")
//            @RequestParam(value = "lat", required = false) String lat,
//            @ApiParam(name = "page", value = "页码", defaultValue = "1")
//            @RequestParam(value = "page", required = false) Integer page,
//            @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
//            @RequestParam(value = "size", required = false) Integer size) throws Exception {
//        List<Facility> facilityList = facilityService.search(fields, filters, sorts, page, size);
//        return success(facilityList, (null == facilityList) ? 0 : facilityList.size(), page, size);
//    }
    /**
     * 根据设施,删除设施关联服务,变更设施服务关联设施数,删除设施
     * @param facility 设施
     * @throws Exception
     */
    private void deleteFacilityByCode(Facility facility) throws Exception {
        List<FacilityServerRelation> facilityServerRelationList = facilityServerRelationService.findByField("facilitieCode", facility.getCode());
        //通过设施与服务关系,变更设施服务使用数量
        for (FacilityServerRelation facilityServerRelation : facilityServerRelationList) {
            List<FacilityServer> facilityServiceList = facilityServerService.findByField("code", facilityServerRelation.getServiceCode());
            for (FacilityServer facilityServer : facilityServiceList) {
                Integer num = Integer.valueOf(facilityServer.getNum()) - 1;
                facilityServer.setNum(num.toString());
                facilityServerService.save(facilityServer);
            }
        }
        facilityServerRelationService.deleteByFacilitieCode(facility.getCode());
        facilityService.delete(facility);
    }
    /**
     * 根据设施及服务编码管理关联关系
     *
     * @param facility1 设施
     * @param facilityServerJson 设施服务编码
     * @return
     */
    public List<FacilityServerRelation> createRelationByServerCode(Facility facility1, String facilityServerJson) {
        List<FacilityServerRelation> list = new ArrayList<>();
        if (StringUtils.isNotEmpty(facilityServerJson)) {
            //设施编码
            String[] fs = facilityServerJson.split(",");
            FacilityServerRelation facilityServerRelation;
            for (String code : fs) {
                List<FacilityServer> facilityServerList = facilityServerService.findByField("code", code);
                for (FacilityServer facilityServer : facilityServerList) {
                    facilityServerRelation = new FacilityServerRelation();
                    facilityServerRelation.setFacilitieCode(facility1.getCode());
                    facilityServerRelation.setFacilitieName(facility1.getName());
                    facilityServerRelation.setServiceCode(facilityServer.getCode());
                    facilityServerRelation.setServiceName(facilityServer.getName());
                    facilityServerRelation.setCreateUser(facility1.getCreateUser());
                    facilityServerRelation.setCreateUserName(facility1.getCreateUserName());
                    //追加设施与服务的关联关系
                    facilityServerRelationService.save(facilityServerRelation);
                    //添加设施的时候,追加改服务的使用设施数量。
                    Integer num = Integer.valueOf(facilityServer.getNum()) + 1;
                    facilityServer.setNum(num.toString());
                    facilityServerService.save(facilityServer);
                    list.add(facilityServerRelation);
                }
            }
        }
        return list;
    }
}

+ 13 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/facilities/FacilitiesServerController.java

@ -132,5 +132,18 @@ public class FacilitiesServerController extends EnvelopRestEndpoint {
        return success("success");
    }
    @ApiOperation(value = "获取设施服务列表", responseContainer = "List")
    @GetMapping(value = HealthyHouseMapping.HealthyHouse.FacilitiesServer.LIST_FACILITIESERVERS )
    public ListEnvelop<FacilityServer> getFacilitiesServer(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段", defaultValue = "")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器", defaultValue = "")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序", defaultValue = "")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        List<FacilityServer> facilityServerList = facilityServerService.search(fields, filters, sorts);
        return success(facilityServerList);
    }
}

+ 1 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/user/FacilityUsedRecordController.java

@ -127,6 +127,7 @@ public class FacilityUsedRecordController extends EnvelopRestEndpoint {
                facilityUsedRecord.setFacilitieLatitudes(facility.getLatitude());
                facilityUsedRecord.setFacilitieAddr(facility.getAddress());
                facilityUsedRecord.setCreateUser(userId);
                facilityUsedRecord.setFacilitieId(facility.getId());
                long count = facilityUsedRecordService.countByFacilitieCodeAndUserId(facility.getCode(), userId);
                facilityUsedRecord.setNum((int)count);
                facilityUsedRecordList.add(facilityUsedRecord);

+ 11 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/model/user/FacilityUsedRecord.java

@ -38,6 +38,9 @@ public class FacilityUsedRecord extends UuidIdentityEntityWithOperator {
    //设施地址
    @Column(name = "facilitie_addr", nullable = false)
    private String facilitieAddr;
    //设施id
    @Column(name = "facilitie_id")
    private String facilitieId;
    //服务编码
    @Column(name = "service_code")
    private String serviceCode;
@ -161,4 +164,12 @@ public class FacilityUsedRecord extends UuidIdentityEntityWithOperator {
    public void setDistance(String distance) {
        this.distance = distance;
    }
    public String getFacilitieId() {
        return facilitieId;
    }
    public void setFacilitieId(String facilitieId) {
        this.facilitieId = facilitieId;
    }
}

+ 6 - 19
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/FacilityUsedRecordService.java

@ -46,37 +46,24 @@ public class FacilityUsedRecordService extends BaseJpaService<FacilityUsedRecord
        return facilityUsedRecordDao.findById(id);
    }
    //根据用户id获取用户历史记录,按设施编码分组
    public List<FacilityUsedRecord> countDistinctByFacilitieCodeAndUserId(String userId) throws Exception {
        String sql = "select fur.*  from facility_used_records  fur WHERE  fur.create_user=? GROUP BY fur.facilitie_code ";
        List<FacilityUsedRecord> facilityUsedRecords = jdbcTemplate.query(sql, new BeanPropertyRowMapper(FacilityUsedRecord.class), userId);
        return facilityUsedRecords;
    }
    public Long countByUserId(String userId){
    public Long countByUserId(String userId) {
        return facilityUsedRecordDao.countByUserId(userId);
    }
    public Long countAll(){
    public Long countAll() {
        return facilityUsedRecordDao.countAllByUserIdIsNotNull();
    }
    public List<FacilityUsedRecord> countDistinctByFacilitieCodeAndUserId(String userId,Integer page,Integer size) throws Exception {
        Integer pageStart = (page - 1) * size;
        Integer pageEnd = page * size;
        String sql = "select fur.*  from facility_used_records  fur WHERE  fur.user_id=? GROUP BY fur.facilitie_code LIMIT "+pageStart+","+pageEnd;
        List<FacilityUsedRecord> facilityUsedRecords = jdbcTemplate.query(sql, new BeanPropertyRowMapper(FacilityUsedRecord.class), userId);
        return facilityUsedRecords;
    }
    public long countPageDistinctByFacilitieCodeAndUserId(String userId) throws Exception {
        String sql = "select count(DISTINCT facilitie_code )  from facility_used_records  fur WHERE  fur.create_user=? ";
        String count = jdbcTemplate.queryForObject(sql, String.class,userId);
        return Long.parseLong(count);
    }
    public long countByFacilitieCodeAndUserId(String facilitieCode,String userId) {
        return facilityUsedRecordDao.countByFacilitieCodeAndCreateUser( facilitieCode, userId);
    //根据用户id及设施编码统计历史导航记录总数
    public long countByFacilitieCodeAndUserId(String facilitieCode, String userId) {
        return facilityUsedRecordDao.countByFacilitieCodeAndCreateUser(facilitieCode, userId);
    }
    /**