瀏覽代碼

Merge branch 'dev' of http://192.168.1.220:10080/jiwei/wlyy2.0 into dev

yeshijie 6 年之前
父節點
當前提交
1b246578f2
共有 36 個文件被更改,包括 912 次插入291 次删除
  1. 1 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java
  2. 10 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/health/house/HealthyHouseMapping.java
  3. 4 4
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wlyy/HouseUserContant.java
  4. 1 1
      common/common-util/src/main/java/com/yihu/jw/util/common/IdCardUtil.java
  5. 5 0
      gateway/ag-basic/pom.xml
  6. 115 120
      gateway/ag-basic/src/main/java/com/yihu/jw/gateway/filter/BasicZuulFilter.java
  7. 3 3
      gateway/ag-basic/src/main/resources/application.yml
  8. 15 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/core/userdetails/jdbc/WlyyUserDetailsService.java
  9. 0 1
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
  10. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WeChatQrcodeController.java
  11. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WechatController.java
  12. 12 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/constant/UserConstant.java
  13. 8 8
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/LoginController.java
  14. 3 1
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/dfs/FastDFSController.java
  15. 170 46
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/facilities/FacilitiesController.java
  16. 14 1
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/facilities/FacilitiesServerController.java
  17. 59 16
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/user/FacilityUsedRecordController.java
  18. 20 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/user/FeedBackController.java
  19. 29 31
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/user/UserController.java
  20. 12 1
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/dao/facility/FacilityDao.java
  21. 4 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/dao/facility/FacilityServerRelationDao.java
  22. 3 1
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/dao/user/FacilityUsedRecordDao.java
  23. 1 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/dao/user/NavigationServiceEvaluationDao.java
  24. 26 15
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/model/facility/Facility.java
  25. 23 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/model/user/FacilityUsedRecord.java
  26. 11 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/model/user/NavigationServiceEvaluation.java
  27. 34 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/model/user/User.java
  28. 7 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/facility/FacilityServerService.java
  29. 27 1
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/facility/FacilityService.java
  30. 62 10
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/FacilityUsedRecordService.java
  31. 93 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/FeedBackService.java
  32. 47 4
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/LoginService.java
  33. 40 24
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/UserService.java
  34. 34 0
      svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/util/MapUtil.java
  35. 17 1
      svr/svr-healthy-house/src/main/resources/application.yml
  36. 二進制
      svr/svr-healthy-house/src/site/resources/健康小屋-设施列表导入模板.xlsx

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

@ -153,6 +153,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";
    }

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

@ -50,8 +50,15 @@ public class HealthyHouseMapping {
            public static final String COUNT_FACILITIES = "/count/facilities";
            public static final String UPDATE_FACILITIE_STATE = "/update/facilitieState";
            public static final String COUNT_FACILITIES_BY_TIME = "/count/facilitiesByTime";
            public static final String NEARBY_FACILITY = "/nearbyFacility";
            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";
            public static final String GET_ALL_FACILITIELISTS_BY_CATEGORY_AND_SERVERCODE = "/list/getAllFacilitiesByCategoryAndServerCode";
        }
        //设施服务
@ -63,6 +70,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";
        }
        //意见反馈
@ -75,6 +83,7 @@ public class HealthyHouseMapping {
            public static final String GET_FEEDBACK_BY_ID = "/getFeedBackById";
            public static final String GET_FEEDBACKS_BY_FIELD = "/getFeedBacksByField";
            public static final String UPDATE_FEEDBACKS_BY_ID = "/updateFeedBacksById";
            public static final String EXPORT_EXCEL = "/exportExcel/feedBacks";
        }
        //用户使用导航记录
@ -89,6 +98,7 @@ public class HealthyHouseMapping {
            public static final String UPDATE_FACILITY_USED_RECORD_BY_ID = "/updateFacilityUsedRecordById";
            public static final String GET_FACILITY_USED_RECORD_AND_COUNT_BY_ID = "/getFacilityUsedRecordAndCountById";
            public static final String COUNT_FACILITY_USED_RECORD_BY_USERID = "/countFacilityUsedRecordByUserId";
            public static final String GET_FACILITY_USED_RECORD_DETAIL = "/getUsedRecordDetail";
        }
        //服务评价

+ 4 - 4
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/wlyy/HouseUserContant.java

@ -5,8 +5,8 @@ package com.yihu.jw.restmodel.wlyy;
 * @created 2018/9/18 20:19
 */
public class HouseUserContant {
    public static Integer activated_del=-1;
    public static Integer activated_lock=0;
    public static Integer activated_active =1;
    public static Integer activated_offline=2;
    public static Integer activated_del = -1;//删除
    public static Integer activated_lock = 0;//冻结
    public static Integer activated_active = 1;//在线
    public static Integer activated_offline = 2;//离线
}

+ 1 - 1
common/common-util/src/main/java/com/yihu/jw/util/common/IdCardUtil.java

@ -140,7 +140,7 @@ public class IdCardUtil {
//        error.put("cardId", "身份证号码长度必须等于15或18位");
//    }
    private boolean cardCodeVerifySimple(String cardcode) {
    public static boolean cardCodeVerifySimple(String cardcode) {
        //第一代身份证正则表达式(15位)
        String isIDCard1 = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";
        //第二代身份证正则表达式(18位)

+ 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 {

+ 12 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/constant/UserConstant.java

@ -0,0 +1,12 @@
package com.yihu.jw.healthyhouse.constant;
/**
 * @author HZY
 * @created 2018/9/19 9:10
 */
public class UserConstant {
    public static final String UNAUTHORIZED = "0";
    public static final String AUTHORIZED = "1";
}

+ 8 - 8
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/LoginController.java

@ -25,7 +25,7 @@ import java.util.HashMap;
 * @author HZY
 * @created 2018/9/18 19:55
 */
@Api(value = "LoginController", description = "登录", tags = {"登录"})
@Api(value = "LoginController", description = "登录管理", tags = {"1登录及验证"})
@RestController
public class LoginController extends EnvelopRestEndpoint {
@ -41,7 +41,7 @@ public class LoginController extends EnvelopRestEndpoint {
    @ApiOperation(value = "发送短信验证码")
    @GetMapping(value = "/captcha/send")
    public ResponseEntity<HashMap> captcha(
            @ApiParam(name = "clientId", value = "应用id", required = true)@RequestParam(required = true, name = "clientId") String clientId,
            @ApiParam(name = "clientId", value = "应用id",defaultValue = "EwC0iRSrcS", required = true)@RequestParam(required = true, name = "clientId") String clientId,
            @ApiParam(name = "msgType", value = "消息类型(login:登录验证,checkPhone:验证安全手机,resetPhone:重设安全手机", required = true)@RequestParam(required = true, name = "msgType") String msgType,
            @ApiParam(name = "username", value = "手机账号", required = true)@RequestParam(required = true, name = "username") String username ) throws  Exception{
        if (StringUtils.isEmpty(clientId)) {
@ -51,16 +51,16 @@ public class LoginController extends EnvelopRestEndpoint {
            throw new InvalidRequestException("username");
        }
        //验证请求间隔超时,防止频繁获取验证码
        if (!wlyyRedisVerifyCodeService.isIntervalTimeout(clientId, username)) {
            throw new IllegalAccessException("SMS request frequency is too fast");
        }
//        if (!wlyyRedisVerifyCodeService.isIntervalTimeout(clientId, username)) {
//            throw new IllegalAccessException("SMS request frequency is too fast");
//        }
        //发送短信获取验证码
        ResponseEntity<HashMap> result = loginService.sendSms(clientId,msgType,username);
        ResponseEntity<HashMap> result = loginService.sendDemoSms(clientId,msgType,username);
        return result;
    }
    @GetMapping("/mobile/login")
    @PostMapping("/mobile/login")
    @ApiOperation(value = "【普通用户】-手机登录注册")
    public ObjEnvelop mobileLogin(
            HttpServletRequest request,
@ -116,7 +116,7 @@ public class LoginController extends EnvelopRestEndpoint {
    /***************************  管理员相关 **************************************/
    @GetMapping("/mobile/manage/login")
    @PostMapping("/mobile/manage/login")
    @ApiOperation(value = "【管理员】-手机验证登录")
    public ObjEnvelop administratorMobileLogin(
            HttpServletRequest request,

+ 3 - 1
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/dfs/FastDFSController.java

@ -16,6 +16,7 @@ import io.swagger.annotations.ApiParam;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -84,13 +85,14 @@ public class FastDFSController extends EnvelopRestEndpoint {
     * @return
     * @throws Exception
     */
    @PostMapping(value = HealthyHouseMapping.HealthyHouse.FastDFS.UPLOADJSON)
    @PostMapping(value = HealthyHouseMapping.HealthyHouse.FastDFS.UPLOADJSON,consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "文件上传", notes = "返回相关索引信息,以及HttpUrl下载连接(兼容旧接口)")
    public ObjEnvelop<FileResource> upload(
            @ApiParam(name = "jsonData", value = "文件资源", required = true)
            @RequestBody String jsonData) throws Exception {
        Map<String, String> paramMap = toEntity(jsonData, Map.class);
        String fileStr = paramMap.get("fileStr");
        //解码
        byte[] bytes = Base64.getDecoder().decode(fileStr);
        InputStream inputStream = new ByteArrayInputStream(bytes);
        String fileName = paramMap.get("fileName");

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

@ -1,7 +1,6 @@
package com.yihu.jw.healthyhouse.controller.facilities;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.cfg.ContextAttributes;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.healthyhouse.model.facility.Facility;
import com.yihu.jw.healthyhouse.model.facility.FacilityServer;
@ -28,6 +27,7 @@ import org.springframework.web.bind.annotation.*;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import com.yihu.jw.restmodel.web.Envelop;
@ -45,7 +45,7 @@ import javax.servlet.http.HttpServletResponse;
 */
@RestController
@RequestMapping(HealthyHouseMapping.api_healthyHouse_common)
@Api(value = "Facility", description = "设施管理", tags = {"设施管理"})
@Api(value = "Facility", description = "设施管理", tags = {"3设施管理"})
public class FacilitiesController extends EnvelopRestEndpoint {
    @Autowired
@ -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);
            }
        }
        facilityBack.setFacilityServerRelation(models);
        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);
            }
        }
        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(
@ -156,7 +193,7 @@ public class FacilitiesController extends EnvelopRestEndpoint {
    }
    @ApiOperation(value = "新增/更新(idy已存在)设施")
    @PutMapping(value = HealthyHouseMapping.HealthyHouse.Facilities.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @PostMapping(value = HealthyHouseMapping.HealthyHouse.Facilities.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ObjEnvelop<Facility> updateFacilities(
            @ApiParam(name = "facility", value = "设施JSON结构(不包括设施与服务关联关系)")
            @RequestBody Facility facility) throws Exception {
@ -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("导入失败");
    }
@ -288,8 +314,30 @@ public class FacilitiesController extends EnvelopRestEndpoint {
            @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<Facility> facilityList = facilityService.search(fields, filters, sorts);
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "facilityCategory", value = "设施分类:1小屋、2步道、3餐厅", defaultValue = "1")
            @RequestParam(value = "facilityCategory", required = false) String facilityCategory,
            @ApiParam(name = "facilityServerType", value = "非必传参数:设施服务类型:dinner吃饭、measure测量、sports运动", defaultValue = "measure")
            @RequestParam(value = "facilityServerType", required = false) String facilityServerType,
            @ApiParam(name = "facilityServerCodes", value = "非必传参数:设施服务编码,可多个,用逗号隔开", defaultValue = "jkxwServer003,HFHS7C5B5")
            @RequestParam(value = "facilityServerCodes", required = false) String facilityServerCodes) throws Exception {
        List<Facility> facilityList = new ArrayList<>();
        //设施服务编码存在,查找使用该服务的设施
        if (StringUtils.isNotEmpty(facilityServerCodes)) {
            String[] faServerCodes = facilityServerCodes.split(",");
            List<String> facilityCodeList = facilityService.getFacilityCodeByServerCode(faServerCodes);
            facilityList = facilityService.getFacilityByFacilityCode(facilityCodeList);
        } else if (StringUtils.isNotEmpty(facilityServerType)) {
            //设施编码为空,设施服务类型不为空,按设施服务类型获取设施
            List<String> facilityCodeList = facilityService.getFacilityCodeByServerType(facilityServerType);
            facilityList = facilityService.getFacilityByFacilityCode(facilityCodeList);
        } else if (StringUtils.isNotEmpty(facilityCategory)) {
            //设施编码为空,设施服务类型为空,按照设施分类获取按设施服务类型获取设施
            filters = "category=" + facilityCategory;
            facilityList = facilityService.search(fields, filters, sorts);
        } else {
            facilityList = facilityService.search(fields, filters, sorts);
        }
        return success(facilityList);
    }
@ -300,17 +348,93 @@ 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 = (null == facilityServer.getNum() ? 0 : (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) {
                if (StringUtils.isNotEmpty(code)) {
                    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 = (null == facilityServer.getNum() ? 0 + 1 : (Integer.valueOf(facilityServer.getNum()) + 1));
                        facilityServer.setNum(num.toString());
                        facilityServerService.save(facilityServer);
                        list.add(facilityServerRelation);
                    }
                }
            }
        }
        return list;
    }
}

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

@ -26,7 +26,7 @@ import java.util.List;
 */
@RestController
@RequestMapping(HealthyHouseMapping.api_healthyHouse_common)
@Api(value = "FacilityServer", description = "设施服务管理", tags = {"设施服务管理"})
@Api(value = "FacilityServer", description = "设施服务管理", tags = {"4设施服务管理"})
public class FacilitiesServerController extends EnvelopRestEndpoint {
    @Autowired
@ -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);
    }
}

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

@ -1,8 +1,12 @@
package com.yihu.jw.healthyhouse.controller.user;
import com.yihu.jw.healthyhouse.model.facility.Facility;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.healthyhouse.model.user.FacilityUsedRecord;
import com.yihu.jw.healthyhouse.service.facility.FacilityService;
import com.yihu.jw.healthyhouse.service.user.FacilityUsedRecordService;
import com.yihu.jw.healthyhouse.service.user.UserService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
@ -17,7 +21,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
@ -26,11 +32,15 @@ import java.util.List;
 */
@RestController
@RequestMapping(HealthyHouseMapping.api_healthyHouse_common)
@Api(value = "FacilityUsedRecord", description = "用户使用导航记录管理", tags = {"用户使用导航记录管理"})
@Api(value = "FacilityUsedRecord", description = "用户使用导航记录管理", tags = {"5用户使用导航记录管理"})
public class FacilityUsedRecordController extends EnvelopRestEndpoint {
    @Autowired
    private FacilityUsedRecordService facilityUsedRecordService;
    @Autowired
    private UserService userService;
    @Autowired
    private FacilityService facilityService;
    @ApiOperation(value = "获取用户使用导航记录列表--分页(web)", responseContainer = "List")
    @GetMapping(value = HealthyHouseMapping.HealthyHouse.FacilityUsedRecord.PAGE)
@ -53,8 +63,9 @@ public class FacilityUsedRecordController extends EnvelopRestEndpoint {
    @PostMapping(value = HealthyHouseMapping.HealthyHouse.FacilityUsedRecord.CREATE)
    public ObjEnvelop<FacilityUsedRecord> createFacilityUsedRecord(
            @ApiParam(name = "facilityUsedRecord", value = "用户使用导航记录JSON结构")
            @RequestBody FacilityUsedRecord facilityUsedRecord) throws IOException {
            @RequestBody FacilityUsedRecord facilityUsedRecord) throws IOException, ManageException {
        facilityUsedRecord = facilityUsedRecordService.save(facilityUsedRecord);
        userService.updateFacilityUse(facilityUsedRecord.getUserId());
        return success(facilityUsedRecord);
    }
@ -91,23 +102,45 @@ public class FacilityUsedRecordController extends EnvelopRestEndpoint {
        return success("success");
    }
    @ApiOperation(value = "获取用户查找导航记录,包含设施使用次数统计")
    @ApiOperation(value = "获取用户查找历史导航记录,及所有设施包含设施使用次数统计")
    @GetMapping(value = HealthyHouseMapping.HealthyHouse.FacilityUsedRecord.GET_FACILITY_USED_RECORD_AND_COUNT_BY_ID)
    public PageEnvelop<FacilityUsedRecord> getFacilityUsedRecordAndCountById(
    public ListEnvelop<FacilityUsedRecord> getFacilityUsedRecordAndCountById(
            @ApiParam(name = "userId", value = "用户ID", defaultValue = "")
            @RequestParam(value = "userId") String userId,
            @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
            @RequestParam(value = "size", required = false) Integer size,
            @ApiParam(name = "page", value = "页码", defaultValue = "1")
            @RequestParam(value = "page", required = false) Integer page) throws Exception {
        //根据用户id
        List<FacilityUsedRecord> facilityUsedRecordList = facilityUsedRecordService.countDistinctByFacilitieCodeAndUserId(userId, page, size);
        for (FacilityUsedRecord facilityUsedRecord1 : facilityUsedRecordList) {
            long count = facilityUsedRecordService.countByFacilitieCodeAndUserId(facilityUsedRecord1.getFacilitieCode(), userId);
            facilityUsedRecord1.setNum((int) count);
            @ApiParam(name = "filters", value = "检索字段", defaultValue = "")
            @RequestParam(value = "filters",required = false) String filters,
            @ApiParam(name = "nearbyFlag", value = "是否为“附近”的功能", defaultValue = "false")
            @RequestParam(value = "nearbyFlag") boolean nearbyFlag) throws Exception {
        List<FacilityUsedRecord> facilityUsedRecordList =new ArrayList<>();
        FacilityUsedRecord facilityUsedRecord;
        if(nearbyFlag){
            if(StringUtils.isNotEmpty(filters)){
                filters=  "name?"+filters+" g1;cityName?"+filters+" g1;countyName?"+filters+" g1;street?"+filters+" g1";
            }
            //获取所有设施,并根据设施编码及用户id查找使用次数
            List<Facility> facilityList = facilityService.search(filters);
            for(Facility facility:facilityList){
                facilityUsedRecord=new FacilityUsedRecord();
                facilityUsedRecord.setFacilitieCode(facility.getCode());
                facilityUsedRecord.setFacilitieName(facility.getName());
                facilityUsedRecord.setFacilitieLongitude(facility.getLongitude());
                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);
            }
        }else{
            //根据用户id,获取我的历史记录
            facilityUsedRecordList = facilityUsedRecordService.countDistinctByFacilitieCodeAndUserId(userId);
            for (FacilityUsedRecord facilityUsedRecord1 : facilityUsedRecordList) {
                long count = facilityUsedRecordService.countByFacilitieCodeAndUserId(facilityUsedRecord1.getFacilitieCode(), userId);
                facilityUsedRecord1.setNum((int) count);
            }
        }
        int total=(int)facilityUsedRecordService.countPageDistinctByFacilitieCodeAndUserId(userId);
        return success(facilityUsedRecordList, total, page, size);
        return success(facilityUsedRecordList);
    }
    @ApiOperation(value = "app-用户使用设施次数", responseContainer = "List")
@ -118,7 +151,7 @@ public class FacilityUsedRecordController extends EnvelopRestEndpoint {
            @ApiParam(name = "facilitieCode", value = "设施id", defaultValue = "")
            @RequestParam(value = "facilitieCode", required = false) String facilitieCode) throws Exception {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("userId=" + userId + ";");
        stringBuffer.append("createUser=" + userId + ";");
        if (StringUtils.isNotEmpty(facilitieCode)) {
            stringBuffer.append("facilitieCode=" + facilitieCode);
        }
@ -128,4 +161,14 @@ public class FacilityUsedRecordController extends EnvelopRestEndpoint {
    }
    @ApiOperation(value = "app-设施使用记录-详情页", responseContainer = "List")
    @GetMapping(value = HealthyHouseMapping.HealthyHouse.FacilityUsedRecord.GET_FACILITY_USED_RECORD_DETAIL)
    public ObjEnvelop facilityUsedRecordDetail(
            @ApiParam(name = "id", value = "使用记录ID", defaultValue = "")
            @RequestParam(value = "id") String id) throws Exception {
        Map<String, Object> usedRecordDetail = facilityUsedRecordService.getUsedRecordDetail(id);
        return success(usedRecordDetail);
    }
}

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

@ -1,7 +1,9 @@
package com.yihu.jw.healthyhouse.controller.user;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.healthyhouse.model.user.FeedBack;
import com.yihu.jw.healthyhouse.model.user.User;
import com.yihu.jw.healthyhouse.service.user.FeedBackService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
@ -17,8 +19,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -116,4 +122,18 @@ public class FeedBackController extends EnvelopRestEndpoint {
        return success("success");
    }
    @GetMapping(value = HealthyHouseMapping.HealthyHouse.FeedBack.EXPORT_EXCEL)
    @ApiOperation(value = "意见反馈列表导出excel")
    public void exportToExcel(
            HttpServletResponse response,
            @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 ManageException, ParseException {
        List<FeedBack> feedBackList = feedBackService.search(fields, filters, sorts);
        feedBackService.exportUsersExcel(response,feedBackList);
    }
}

+ 29 - 31
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/controller/user/UserController.java

@ -2,6 +2,7 @@ package com.yihu.jw.healthyhouse.controller.user;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.healthyhouse.cache.WlyyRedisVerifyCodeService;
import com.yihu.jw.healthyhouse.model.facility.Facility;
import com.yihu.jw.healthyhouse.model.user.User;
import com.yihu.jw.healthyhouse.service.user.UserService;
import com.yihu.jw.restmodel.web.Envelop;
@ -26,16 +27,18 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
/**
 *  用户相关 接口
 * @author HZY
 * @created 2018/9/19 17:29
 */
@Api(value = "UserController", description = "用户信息", tags = {"用户"})
@Api(value = "UserController", description = "用户管理信息", tags = {"2用户管理"})
@RequestMapping(value = "/user", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@RestController
public class UserController  extends EnvelopRestEndpoint {
@ -45,22 +48,23 @@ public class UserController  extends EnvelopRestEndpoint {
    @Autowired
    private WlyyRedisVerifyCodeService wlyyRedisVerifyCodeService;
    @GetMapping("/userList")
    @ApiOperation(value = "获取用户列表")
    public PageEnvelop userList(
            @ApiParam(name = "page", value = "页数", required = true)@RequestParam(required = true, name = "page") Integer page,
            @ApiParam(name = "pageSize", value = "每页数量", required = true)@RequestParam(required = true, name = "pageSize") Integer pageSize,
            @ApiParam(name = "city", value = "所在市区", required = false)@RequestParam(required = false, name = "city") String city,
            @ApiParam(name = "activated", value = "用户状态", required = false)@RequestParam(required = false, name = "activated") String activated ,
            @ApiParam(name = "name", value = "姓名/手机号", required = false)@RequestParam(required = false, name = "name") String name ,
            @ApiParam(name = "order", value = "使用次数排序", required = false)@RequestParam(required = false, name = "order") String order  ) throws ManageException {
        Map<String, String> map = new HashMap<>();
        map.put("cityCode",city);
        map.put("activated",activated);
        map.put("name",name);
        map.put("telephone",name);
        Page<User> users = userService.userList(page, pageSize, map, order);
        return PageEnvelop.getSuccessListWithPage("列表获取成功",users.getContent(),page,pageSize,users.getTotalElements());
            @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,
            @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
            @RequestParam(value = "size", required = false) Integer size,
            @ApiParam(name = "page", value = "页码", defaultValue = "1")
            @RequestParam(value = "page", required = false) Integer page ) throws ManageException, ParseException {
        List<User> userList = userService.search(fields, filters, sorts, page, size);
        return success(userList, userList == null ? 0 : userList.size(), page, size);
    }
@ -75,8 +79,7 @@ public class UserController  extends EnvelopRestEndpoint {
    @GetMapping("/usedFacilityCount")
    @ApiOperation(value = "获取用户统计信息")
    public ObjEnvelop usedFacilityCount(
            @ApiParam(name = "userId", value = "用户id", required = true)@RequestParam(required = true, name = "userId") String userId ) {
    public ObjEnvelop usedFacilityCount() {
        Map<String, Long> userStatistics = userService.findUserStatistics();
        return ObjEnvelop.getSuccess("获取成功",userStatistics);
    }
@ -103,16 +106,6 @@ public class UserController  extends EnvelopRestEndpoint {
    }
    @PostMapping("/facilityUseUpdate")
    @ApiOperation(value = "更新设施使用次数")
    public Envelop facilityUseUpdate(
            @ApiParam(name = "userId", value = "用户Id", required = true)@RequestParam(required = true, name = "userId") String userId ,
            @ApiParam(name = "facilityId", value = "设施Id", required = true)@RequestParam(required = true, name = "facilityId") String facilityId ) throws ManageException {
        userService.updateFacilityUse(userId,facilityId);
        return ObjEnvelop.getSuccess("更新用户使用设施次数成功");
    }
    @PostMapping("/updatePwd")
    @ApiOperation(value = "更新密码")
    public Envelop updatePwd(
@ -141,6 +134,16 @@ public class UserController  extends EnvelopRestEndpoint {
        }
    }
    @PostMapping("/checkIdCardNo")
    @ApiOperation(value = "用户身份证号码认证")
    public Envelop checkIdCardNo(
            @ApiParam(name = "userId", value = "用户Id", required = true)@RequestParam(required = true, name = "userId") String userId ,
            @ApiParam(name = "idCardNo", value = "身份证号码", required = true)@RequestParam(required = true, name = "idCardNo") String idCardNo ) throws ManageException {
        userService.checkIdCardNo(userId, idCardNo);
        return ObjEnvelop.getSuccess("身份证认证完成!");
    }
    @GetMapping("/exportToExcel")
    @ApiOperation(value = "用户列表导出excel")
@ -163,9 +166,4 @@ public class UserController  extends EnvelopRestEndpoint {
}

+ 12 - 1
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/dao/facility/FacilityDao.java

@ -2,9 +2,14 @@ package com.yihu.jw.healthyhouse.dao.facility;
import com.yihu.jw.healthyhouse.model.facility.Facility;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
 * 设施dao
 *
 * @author zdm
 * @version 1.0
 * @created 2018.09.19
@ -12,6 +17,12 @@ import org.springframework.data.jpa.repository.JpaRepository;
public interface FacilityDao extends JpaRepository<Facility, String> {
    Facility findById(String id);
    Facility findByLongitudeAndLatitude(double longitude,double latitude);
    Facility findByLongitudeAndLatitude(double longitude, double latitude);
    Facility findByCode(String code);
    @Query("select f from Facility f where f.code in :code ")
    List<Facility> findByCode(@Param("code") List<String> code);
}

+ 4 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/dao/facility/FacilityServerRelationDao.java

@ -4,6 +4,8 @@ import com.yihu.jw.healthyhouse.model.facility.FacilityServerRelation;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import java.util.List;
/**
 * 设施与服务关系 dao
 * @author zdm
@ -14,6 +16,8 @@ public interface FacilityServerRelationDao extends JpaRepository<FacilityServerR
    FacilityServerRelation findById(String id);
    List<FacilityServerRelation> findByFacilitieCode(String facilityCode);
    @Modifying
    void deleteByFacilitieCode(String facilitieCode);
}

+ 3 - 1
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/dao/user/FacilityUsedRecordDao.java

@ -12,7 +12,9 @@ import org.springframework.data.jpa.repository.JpaRepository;
public interface FacilityUsedRecordDao extends JpaRepository<FacilityUsedRecord, Long> {
    FacilityUsedRecord findById(String id);
    Long countByUserId(String userId);
    Long countAllByUserIdIsNotNull();
    long countByFacilitieCodeAndUserId(String facilitieCode,String userId);
    long countByFacilitieCodeAndCreateUser(String facilitieCode,String createUser);
}

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

@ -12,5 +12,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
public interface NavigationServiceEvaluationDao extends JpaRepository<NavigationServiceEvaluation, Long> {
    NavigationServiceEvaluation findById(String id);
    NavigationServiceEvaluation findByUseRecordId(String recordId);
}

+ 26 - 15
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/model/facility/Facility.java

@ -58,6 +58,9 @@ public class Facility extends UuidIdentityEntityWithOperator {
    //街道
    @Column(name = "street")
    private String street;
    //地址
    @Column(name = "address")
    private String address;
    //服务时间:周一至周天,用逗号隔开
    @Column(name = "service_day")
    private String serviceDay ;
@ -289,21 +292,29 @@ public class Facility extends UuidIdentityEntityWithOperator {
    public void setCategoryValue(String categoryValue) {
        this.categoryValue = categoryValue;
    }
    @Transient
    public String getAddress(){
        String address = "";
        if (this.getProvinceId()!=null ) {
        }
        if (this.getCityName() !=null ){
            address += this.getCityName();
        }
        if (this.getCountyName() !=null ){
            address += this.getCountyName();
        }
        if (this.getStreet() !=null) {
            address += this.getStreet();
        }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    //    @Transient
//    public String getAddress(){
//        String address = "";
//        if (this.getProvinceId()!=null ) {
//
//        }
//        if (this.getCityName() !=null ){
//            address += this.getCityName();
//        }
//        if (this.getCountyName() !=null ){
//            address += this.getCountyName();
//        }
//        if (this.getStreet() !=null) {
//            address += this.getStreet();
//        }
//        return address;
//    }
}

+ 23 - 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;
@ -47,6 +50,10 @@ public class FacilityUsedRecord extends UuidIdentityEntityWithOperator {
    //导航时长
    @Column(name = "duration")
    private String duration;
    //导航距离
    @Column(name = "distance")
    private String distance;
    //用户id
    @Column(name = "user_id")
    private String userId;
@ -149,4 +156,20 @@ public class FacilityUsedRecord extends UuidIdentityEntityWithOperator {
    public void setNum(Integer num) {
        this.num = num;
    }
    public String getDistance() {
        return distance;
    }
    public void setDistance(String distance) {
        this.distance = distance;
    }
    public String getFacilitieId() {
        return facilitieId;
    }
    public void setFacilitieId(String facilitieId) {
        this.facilitieId = facilitieId;
    }
}

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

@ -38,6 +38,9 @@ public class NavigationServiceEvaluation extends UuidIdentityEntityWithOperator
    //备注、意见或建议
    @Column(name = "remark")
    private String remark;
    //设施使用记录ID
    @Column(name = "use_record_id")
    private String useRecordId;
    public String getFacilitieCode() {
        return facilitieCode;
@ -94,4 +97,12 @@ public class NavigationServiceEvaluation extends UuidIdentityEntityWithOperator
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getUseRecordId() {
        return useRecordId;
    }
    public void setUseRecordId(String useRecordId) {
        this.useRecordId = useRecordId;
    }
}

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

@ -1,6 +1,7 @@
package com.yihu.jw.healthyhouse.model.user;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
@ -25,12 +26,14 @@ public class User extends UuidIdentityEntityWithOperator {
    private String password;
    @Column(name = "gender" )
    private String gender;
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
    @Column(name = "birthday" )
    private Date birthday;
    @Column(name = "id_card_no", nullable = false)
    private String idCardNo;
    @Column(name = "telephone", nullable = false)
    private String telephone;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    @Column(name = "last_login_time", length = 0)
    private Date lastLoginTime;
    @Column(name = "img_remote_path")
@ -59,6 +62,13 @@ public class User extends UuidIdentityEntityWithOperator {
    @Column(name = "facility_used_count")
    private Integer facilityUsedCount;//设施使用次数
    @Column(name = "realname_authentication")
    private String realnameAuthentication;//实名认证
    @Column(name = "phone_authentication")
    private String phoneAuthentication;//手机认证
    @Column(name = "ijk_authentication")
    private String ijkAuthentication;//i健康认证
    public String getLoginCode() {
        return loginCode;
@ -220,6 +230,30 @@ public class User extends UuidIdentityEntityWithOperator {
        this.street = street;
    }
    public String getRealnameAuthentication() {
        return realnameAuthentication;
    }
    public void setRealnameAuthentication(String realnameAuthentication) {
        this.realnameAuthentication = realnameAuthentication;
    }
    public String getPhoneAuthentication() {
        return phoneAuthentication;
    }
    public void setPhoneAuthentication(String phoneAuthentication) {
        this.phoneAuthentication = phoneAuthentication;
    }
    public String getIjkAuthentication() {
        return ijkAuthentication;
    }
    public void setIjkAuthentication(String ijkAuthentication) {
        this.ijkAuthentication = ijkAuthentication;
    }
    @Transient
    public String getAddress(){
        String address ="";

+ 7 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/facility/FacilityServerService.java

@ -1,12 +1,18 @@
package com.yihu.jw.healthyhouse.service.facility;
import com.yihu.jw.healthyhouse.dao.facility.FacilityServerDao;
import com.yihu.jw.healthyhouse.model.facility.Facility;
import com.yihu.jw.healthyhouse.model.facility.FacilityServer;
import com.yihu.mysql.query.BaseJpaService;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * 设施服务管理器.
 *
@ -25,4 +31,5 @@ public class FacilityServerService extends BaseJpaService<FacilityServer, Facili
        return  facilityServerDao.findById(id);
    }
}

+ 27 - 1
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/facility/FacilityService.java

@ -9,12 +9,15 @@ import com.yihu.jw.healthyhouse.service.dict.SystemDictEntryService;
import com.yihu.jw.healthyhouse.util.facility.msg.FacilityMsg;
import com.yihu.jw.healthyhouse.util.poi.ExcelUtils;
import com.yihu.mysql.query.BaseJpaService;
import io.swagger.models.auth.In;
import jxl.write.Colour;
import jxl.write.WritableCellFormat;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.transform.Transformers;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -212,5 +215,28 @@ public class FacilityService extends BaseJpaService<Facility, FacilityDao> {
        return "CSHF" + randomString(5);
    }
    /**
     * 根据服务类型获取设施
     */
    public List<String> getFacilityCodeByServerType(String type){
        Session s = currentSession();
        String hql = "(SELECT  DISTINCT fsr.facilitie_code FROM  facility_server_relation fsr,facility_server fs WHERE fsr.service_code=fs.code and fs.type=:type)";
        Query query = s.createSQLQuery(hql);
        query.setParameter("type",type);
        return query.list();
    }
    public List<String> getFacilityCodeByServerCode( String[] codes)
    {
        String sql =  "(SELECT  DISTINCT fsr.facilitie_code FROM  facility_server_relation fsr WHERE fsr.service_code IN(:codes))";
        SQLQuery sqlQuery = currentSession().createSQLQuery(sql);
        sqlQuery.setParameterList("codes", codes);
        return sqlQuery.list();
    }
    public List<Facility> getFacilityByFacilityCode( List<String> facilityCodes){
        return facilityDao.findByCode(facilityCodes);
    }
}

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

@ -1,14 +1,26 @@
package com.yihu.jw.healthyhouse.service.user;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.healthyhouse.dao.facility.FacilityDao;
import com.yihu.jw.healthyhouse.dao.facility.FacilityServerRelationDao;
import com.yihu.jw.healthyhouse.dao.user.FacilityUsedRecordDao;
import com.yihu.jw.healthyhouse.dao.user.NavigationServiceEvaluationDao;
import com.yihu.jw.healthyhouse.model.facility.Facility;
import com.yihu.jw.healthyhouse.model.facility.FacilityServerRelation;
import com.yihu.jw.healthyhouse.model.user.FacilityUsedRecord;
import com.yihu.jw.healthyhouse.model.user.NavigationServiceEvaluation;
import com.yihu.jw.healthyhouse.service.facility.FacilityService;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * 用户导航记录.
@ -23,27 +35,67 @@ public class FacilityUsedRecordService extends BaseJpaService<FacilityUsedRecord
    @Autowired
    private FacilityUsedRecordDao facilityUsedRecordDao;
    @Autowired
    private NavigationServiceEvaluationDao navigationServiceEvaluationDao;
    @Autowired
    private FacilityServerRelationDao facilityServerRelationDao;
    @Autowired
    private FacilityDao facilityDao;
    public FacilityUsedRecord findById(String id) {
        return facilityUsedRecordDao.findById(id);
    }
    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;
    //根据用户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 countPageDistinctByFacilitieCodeAndUserId(String userId) throws Exception {
        String sql = "select count(DISTINCT facilitie_code )  from facility_used_records  fur WHERE  fur.user_id=? ";
        String count = jdbcTemplate.queryForObject(sql, String.class,userId);
        return Long.parseLong(count);
    public Long countByUserId(String userId) {
        return facilityUsedRecordDao.countByUserId(userId);
    }
    public Long countAll() {
        return facilityUsedRecordDao.countAllByUserIdIsNotNull();
    }
    //根据用户id及设施编码统计历史导航记录总数
    public long countByFacilitieCodeAndUserId(String facilitieCode, String userId) {
        return facilityUsedRecordDao.countByFacilitieCodeAndCreateUser(facilitieCode, userId);
    }
    /**
     * 获取 用户使用记录详情
     * @param id
     * @return
     */
    public Map<String,Object> getUsedRecordDetail(String id) throws ManageException {
        Map<String,Object> result = new HashMap<>();
        FacilityUsedRecord record = findById(id);
        if (record == null ){
            throw new ManageException("使用记录不存在!");
        }
    public long countByFacilitieCodeAndUserId(String facilitieCode,String userId) {
        return facilityUsedRecordDao.countByFacilitieCodeAndUserId( facilitieCode, userId);
        String userId = record.getCreateUser();
        String facilityCode = record.getFacilitieCode();
        NavigationServiceEvaluation comment = navigationServiceEvaluationDao.findByUseRecordId(record.getId());
        long historyNum = countByFacilitieCodeAndUserId(facilityCode, userId);
        Facility facility = facilityDao.findByCode(facilityCode);
        List<FacilityServerRelation> facilityServerRelations = facilityServerRelationDao.findByFacilitieCode(facilityCode);
        List<String> services = facilityServerRelations.stream().map(FacilityServerRelation::getServiceName).collect(Collectors.toList());
        if (comment ==null) {
            result.put("commented",false); //未评价
            result.put("star",0);//评分
        }else {
            result.put("commented",true);//已评价
            result.put("star",comment.getScore());//评分
        }
        result.put("usedCount",historyNum);//前往设施次数
        result.put("serviceList",services);//设施包含服务
        result.put("facilityIcon",facility.getImgPath());//设施图片
        return result;
    }
}

+ 93 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/FeedBackService.java

@ -1,12 +1,25 @@
package com.yihu.jw.healthyhouse.service.user;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.healthyhouse.dao.user.FeedBackDao;
import com.yihu.jw.healthyhouse.model.user.FeedBack;
import com.yihu.jw.healthyhouse.model.user.User;
import com.yihu.jw.healthyhouse.util.poi.ExcelUtils;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.mysql.query.BaseJpaService;
import jxl.write.Colour;
import jxl.write.WritableCellFormat;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.List;
/**
 * 意见反馈.
 *
@ -25,4 +38,84 @@ public class FeedBackService extends BaseJpaService<FeedBack, FeedBackDao> {
        return  feedBackDao.findById(id);
    }
    /**
     * excel中添加固定内容
     * @param sheet
     */
    private void addStaticCell(Sheet sheet){
        //设置样式
        Workbook workbook = sheet.getWorkbook();
        CellStyle style = workbook.createCellStyle();
        style.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());//設置背景色
        Font font = workbook.createFont();
        font.setFontName("黑体");
        font.setFontHeightInPoints((short) 12);
        style.setFont(font);
        ExcelUtils.addCellData(sheet,0,0,"序号",style);
        ExcelUtils.addCellData(sheet,1,0,"反馈ID",style);
        ExcelUtils.addCellData(sheet,2,0,"反馈类型",style);
        ExcelUtils.addCellData(sheet,3,0,"反馈用户",style);
        ExcelUtils.addCellData(sheet,4,0,"反馈时间",style);
        ExcelUtils.addCellData(sheet,5,0,"联系电话",style);
        ExcelUtils.addCellData(sheet,6,0,"反馈内容",style);
        ExcelUtils.addCellData(sheet,7,0,"回复",style);
    }
    /**
     *  导出用户反馈列表excel
     * @param response  响应体
     * @param feedBacks  用户反馈列表
     * @throws ManageException
     */
    public void exportUsersExcel(HttpServletResponse response, List<FeedBack> feedBacks) throws ManageException {
        try {
            String fileName = "健康小屋-用户反馈列表";
            //设置下载
            response.setContentType("octets/stream");
            response.setHeader("Content-Disposition", "attachment; filename="
                    + new String( fileName.getBytes("gb2312"), "ISO8859-1" )+".xlsx");
            OutputStream os = response.getOutputStream();
            //获取导出的数据
            JSONObject order = new JSONObject();
            order.put("id","asc");
            //写excel
            Workbook workbook = new XSSFWorkbook();
            int k=0;
            FeedBack metaData = null;
            int row=0;
            //创建Excel工作表 指定名称和位置
            String streetName = "健康小屋-用户反馈列表";
            Sheet sheet = workbook.createSheet(streetName);
            addStaticCell(sheet);
            //添加表格字段信息
            WritableCellFormat wc = new WritableCellFormat();
            wc.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN, Colour.SKY_BLUE);//边框
            for(int j=0;k<feedBacks.size(); j++,k++){
                metaData = feedBacks.get(k);
                row=j+1;
                ExcelUtils.addCellData(sheet,0,row,j+1+"");//序号
                ExcelUtils.addCellData(sheet,1,row, metaData.getId());//内部id
                ExcelUtils.addCellData(sheet,2,row, metaData.getFeedTypeValue());//反馈类型
                ExcelUtils.addCellData(sheet,3,row, metaData.getCreateUserName());//反馈用户
                ExcelUtils.addCellData(sheet,4,row, DateUtil.dateToStr(metaData.getCreateTime(),DateUtil.YYYY_MM_DD_HH_MM_SS));//反馈时间
                ExcelUtils.addCellData(sheet,5,row, metaData.getUserTelephone());//电话
                ExcelUtils.addCellData(sheet,6,row, metaData.getContent());//反馈内容
                ExcelUtils.addCellData(sheet,7,row, metaData.getReplyContent());//回复内容
            }
            //写入工作表
            workbook.write(os);
            workbook.close();
            os.flush();
            os.close();
        } catch (Exception e) {
            throw new ManageException("导出用户反馈列表异常",e);
        }
    }
}

+ 47 - 4
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/LoginService.java

@ -1,11 +1,15 @@
package com.yihu.jw.healthyhouse.service.user;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.entity.base.sms.SmsGatewayDO;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.healthyhouse.cache.WlyyRedisVerifyCodeService;
import com.yihu.jw.healthyhouse.constant.LoginInfo;
import com.yihu.jw.healthyhouse.constant.UserConstant;
import com.yihu.jw.healthyhouse.model.user.User;
import com.yihu.jw.restmodel.wlyy.HouseUserContant;
import com.yihu.jw.util.security.MD5;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
@ -16,6 +20,7 @@ import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@ -28,7 +33,7 @@ import java.util.Map;
 * @created 2018/9/18 20:02
 */
@Service
public class LoginService {
public class LoginService  extends BaseJpaService {
    @Autowired
    private UserService userService;
@ -56,11 +61,12 @@ public class LoginService {
            user.setLoginCode(loginCode);
            user.setName(loginCode);
            user.setTelephone(loginCode);
            // 更新身份证验证字段
            user.setPhoneAuthentication(UserConstant.AUTHORIZED);
            user.setPassword(LoginInfo.DEFAULT_PASSWORD);
        } else {
            //已注册用户更改用户状态
            user.setActivated(HouseUserContant.activated_active);
        }
        //已注册用户更改用户状态
        user.setActivated(HouseUserContant.activated_active);
        request.getSession().setAttribute(LoginInfo.IS_LOGIN, true);
        request.getSession().setAttribute(LoginInfo.TOKEN, ""); //TODO token是否添加
        request.getSession().setAttribute(LoginInfo.LOGIN_NAME, user.getName());
@ -209,6 +215,43 @@ public class LoginService {
        }
    }
    public ResponseEntity<HashMap> sendDemoSms(String clientId, String type, String phone) throws ParseException, ManageException, IOException {
        //发送短信获取验证码
        String resultStr = "{\n" +
                "    \"obj\": {\n" +
                "        \"id\": \"4028cb816615a019016615b662b10003\",\n" +
                "        \"createTime\": \"2018-09-26 19:49:26\",\n" +
                "        \"createUser\": null,\n" +
                "        \"createUserName\": null,\n" +
                "        \"updateTime\": \"2018-09-26 19:49:26\",\n" +
                "        \"updateUser\": null,\n" +
                "        \"updateUserName\": null,\n" +
                "        \"clientId\": \"EwC0iRSrcS\",\n" +
                "        \"smsGatewayId\": \"402803f9657fa37b01657fb58b9b0000\",\n" +
                "        \"requestIp\": \"127.0.0.1\",\n" +
                "        \"mobile\": \"18250165552\",\n" +
                "        \"content\": \"【i健康综合管理平台】您使用的是i健康综合管理平台短信模板,您的验证码是329931,请于10分钟内正确输入!\",\n" +
                "        \"deadline\": \"2018-09-26 19:59:26\",\n" +
                "        \"captcha\": \"329931\",\n" +
                "        \"type\": \"login\"\n" +
                "    },\n" +
                "    \"message\": \"success\",\n" +
                "    \"status\": 200\n" +
                "}";
        String captcha = randomInt(6);
        resultStr = resultStr.replaceAll("329931",captcha);
        ObjectMapper objectMapper = new ObjectMapper();
        HashMap<String, Object> result = objectMapper.readValue(resultStr,HashMap.class);
            Long expire = 600L;
            wlyyRedisVerifyCodeService.store(clientId, phone, captcha, expire.intValue());
            HttpHeaders headers = new HttpHeaders();
            headers.set("Cache-Control", "no-store");
            headers.set("Pragma", "no-cache");
            return new ResponseEntity<>(result, headers, HttpStatus.OK);
    }
    /**
     * 管理员手机登录

+ 40 - 24
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/service/user/UserService.java

@ -2,13 +2,18 @@ package com.yihu.jw.healthyhouse.service.user;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.healthyhouse.constant.LoginInfo;
import com.yihu.jw.healthyhouse.constant.UserConstant;
import com.yihu.jw.healthyhouse.dao.facility.FacilityDao;
import com.yihu.jw.healthyhouse.dao.user.UserDao;
import com.yihu.jw.healthyhouse.model.facility.Facility;
import com.yihu.jw.healthyhouse.model.user.User;
import com.yihu.jw.healthyhouse.util.poi.ExcelUtils;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.wlyy.HouseUserContant;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.security.MD5;
import com.yihu.mysql.query.BaseJpaService;
import jxl.write.Colour;
import jxl.write.WritableCellFormat;
import org.apache.poi.ss.usermodel.*;
@ -28,16 +33,19 @@ import javax.servlet.http.HttpServletResponse;
import javax.transaction.Transactional;
import java.io.OutputStream;
import java.util.*;
import java.util.regex.Pattern;
/**
 * @author HZY
 * @created 2018/9/18 19:48
 */
@Service
public class UserService {
public class UserService extends BaseJpaService<User, UserDao> {
    @Autowired
    private UserDao userDao;
    @Autowired
    private FacilityUsedRecordService facilityUsedRecordService;
    public User findById(String id) {
        return userDao.findById(id);
@ -192,22 +200,6 @@ public class UserService {
        }
    }
    /**
     * 更新设施使用次数
     * @param userId            用户id
     * @param facilityId    设施id
     * @throws ManageException
     */
    @Transactional
    public void updateFacilityUse(String userId, String facilityId) throws ManageException {
        User user1 = findById(userId);
        if (user1==null) {
            throw new ManageException("该账号不存在");
        }
        user1.setFacilityUsedCount(user1.getFacilityUsedCount()+1);
        userDao.save(user1);
        //TODO 设施的使用次数更新
    }
    @Transactional
    public void updatePwd(String userId, String oldPwd,String newPwd) throws ManageException {
@ -254,7 +246,7 @@ public class UserService {
        //在线用户数
        Long activeCount = userDao.countAllByActivated(HouseUserContant.activated_active);
        //用户设施使用总次数
        Long usePricilityCount = sumFacilityCount();
        Long usePricilityCount = facilityUsedRecordService.countAll();
        result.put("totalCount",totalCount);
        result.put("newCount",newCount);
        result.put("activeCount",activeCount);
@ -263,15 +255,24 @@ public class UserService {
    }
    /**
     * 用户使用设施次数总和
     * @return
     *  用户身份证认证
     * @param userId    用户ID
     * @param idCardNo  身份证
     * @throws ManageException
     */
    public Long sumFacilityCount(){
        Long aLong = userDao.sumFacilityUseCout();
        return aLong;
    public void checkIdCardNo(String userId, String idCardNo) throws ManageException {
        User user1 = findById(userId);
        if (user1==null) {
            throw new ManageException("该账号不存在");
        }
        if(!IdCardUtil.cardCodeVerifySimple(idCardNo)){
            throw new ManageException("身份证号格式有误");
        }
        // 更新身份证验证字段
        user1.setRealnameAuthentication(UserConstant.AUTHORIZED);
        userDao.save(user1);
    }
   
    //excel中添加固定内容
    private void addStaticCell(Sheet sheet){
@ -351,6 +352,21 @@ public class UserService {
        }
    }
    /**
     * 更新设施使用次数
     * @param userId            用户id
     * @throws ManageException
     */
    @Transactional
    public void updateFacilityUse(String userId) throws ManageException {
        User user1 = findById(userId);
        if (user1==null) {
            throw new ManageException("该账号不存在");
        }
        user1.setFacilityUsedCount(user1.getFacilityUsedCount()+1);
        userDao.save(user1);
    }
}

+ 34 - 0
svr/svr-healthy-house/src/main/java/com/yihu/jw/healthyhouse/util/MapUtil.java

@ -0,0 +1,34 @@
package com.yihu.jw.healthyhouse.util;
/**
 *
 *  经纬度距离计算 - 摘抄网络
 * @author HZY
 * @created 2018/9/26 21:02
 */
public class MapUtil {
    private static double EARTH_RADIUS = 6371.393;
    public static double getDistance(double lng1,double lat1,double lng2,double lat2){
        double radLat1 = rad(lat1);
        double radLat2 = rad(lat2);
        double a = radLat1 - radLat2;
        double b = rad(lng1) - rad(lng2);
        double s = 2 * Math.asin(Math.sqrt(Math.abs(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2))));
        s = s * EARTH_RADIUS;
        s = Math.round(s * 1000);
        return s;
    }
    private static double rad(double d)
    {
        return d * Math.PI / 180.0;
    }
    public static void main(String[] args) {
        double distance = getDistance(118.191839, 24.49555, 118.15639977090478000000, 24.48613312327105300000);
        System.out.println(distance);
    }
}

+ 17 - 1
svr/svr-healthy-house/src/main/resources/application.yml

@ -72,11 +72,15 @@ spring:
    url: jdbc:mysql://172.19.103.77:3306/healthy_house?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
    username: root
    password: 123456
  redis:
    host: 172.19.103.47
    port: 6379
    password: redis!@456
fastDFS:
  fastdfs_file_url: http://172.19.103.54:80/
# 短信发送地址
jw:
  smsUrl: http://svr-base:10020/sms_gateway/send
  smsUrl: http://svr-base-hzy:10020/sms_gateway/send
---
spring:
@ -85,6 +89,10 @@ spring:
    url: jdbc:mysql://172.19.103.77:3306/healthy_house?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
    username: root
    password: 123456
  redis:
    host: 172.19.103.47
    port: 6379
    password: redis!@456
fastDFS:
  fastdfs_file_url: http://172.19.103.54:80/
jw:
@ -93,6 +101,14 @@ jw:
---
spring:
  profiles: jwprod
  datasource:
    url: jdbc:mysql://172.19.103.77:3306/healthy_house?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
    username: root
    password: 123456
  redis:
    host: 172.19.103.47
    port: 6379
    password: redis!@456
fastDFS:
  fastdfs_file_url: http://172.19.103.54:80/
jw:

二進制
svr/svr-healthy-house/src/site/resources/健康小屋-设施列表导入模板.xlsx