ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsEvaluate.java
@@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -39,10 +40,13 @@ @ApiModelProperty(value = "用户id") @TableField("app_user_id") private Long appUserId; @ApiModelProperty(value = "订单id") @TableField("order_id") private Long orderId; @ApiModelProperty(value = "评分") @TableField("grade") private Integer grade; private BigDecimal grade; @ApiModelProperty(value = "评价内容") @TableField("comment") ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Technician.java
@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -69,6 +70,12 @@ @ApiModelProperty(value = "添加时间") @TableField("create_time") private LocalDateTime createTime; @ApiModelProperty("服务次数") @TableField(exist = false) private Integer serveCount; @ApiModelProperty("平均分") @TableField(exist = false) private BigDecimal grade; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/IndexConfigSetDto.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.other.api.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class IndexConfigSetDto { @ApiModelProperty("公司理念") private String companyWant; @ApiModelProperty("宣传图片1") private String pic1; @ApiModelProperty("跳转类型1 - 1无2外部链接3商品详情4秒杀商品详情5领卷中心") private Integer direct1; @ApiModelProperty("宣传图片2") private String pic2; @ApiModelProperty("跳转类型2 - 1无2外部链接3商品详情4秒杀商品详情5领卷中心") private String direct2; @ApiModelProperty("公司简介") private String companyInfo; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OrderFallbackFactory.java
New file @@ -0,0 +1,39 @@ package com.ruoyi.other.api.factory; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ExchangeBackDto; import com.ruoyi.common.core.dto.ExchangeDto; import com.ruoyi.other.api.feignClient.OrderClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; import java.util.List; /** * 充电订单服务降级处理 * * @author ruoyi */ @Component public class OrderFallbackFactory implements FallbackFactory<OrderClient> { private static final Logger log = LoggerFactory.getLogger(OrderFallbackFactory.class); @Override public OrderClient create(Throwable cause) { log.error("商品订单调用失败:{}", cause.getMessage()); return new OrderClient() { @Override public R getOrderIdsByTechId(Integer id) { return R.fail("根据技师id查订单ids失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderClient.java
New file @@ -0,0 +1,24 @@ package com.ruoyi.other.api.feignClient; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ExchangeBackDto; import com.ruoyi.common.core.dto.ExchangeDto; import com.ruoyi.other.api.factory.OrderFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 后台订单服务 * @author ruoyi */ @FeignClient(contextId = "OrderClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = OrderFallbackFactory.class) public interface OrderClient { @PostMapping(value = "/management/give/vip") public R<List<Long>> getOrderIdsByTechId(@RequestParam("id") Integer id); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java
New file @@ -0,0 +1,150 @@ package com.ruoyi.system.api.model; import java.io.Serializable; import java.util.Set; /** * 用户信息 * * @author ruoyi */ public class LoginUser implements Serializable { private static final long serialVersionUID = 1L; /** * 用户唯一标识 */ private String token; /** * 用户名id */ private Long userid; /** * 用户名 */ private String username; /** * 登录时间 */ private Long loginTime; /** * 过期时间 */ private Long expireTime; /** * 登录IP地址 */ private String ipaddr; /** * 权限列表 */ private Set<String> permissions; /** * 角色列表 */ private Set<String> roles; /** * 用户信息 */ private SysUser sysUser; public String getToken() { return token; } public void setToken(String token) { this.token = token; } public Long getUserid() { return userid; } public void setUserid(Long userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Long getLoginTime() { return loginTime; } public void setLoginTime(Long loginTime) { this.loginTime = loginTime; } public Long getExpireTime() { return expireTime; } public void setExpireTime(Long expireTime) { this.expireTime = expireTime; } public String getIpaddr() { return ipaddr; } public void setIpaddr(String ipaddr) { this.ipaddr = ipaddr; } public Set<String> getPermissions() { return permissions; } public void setPermissions(Set<String> permissions) { this.permissions = permissions; } public Set<String> getRoles() { return roles; } public void setRoles(Set<String> roles) { this.roles = roles; } public SysUser getSysUser() { return sysUser; } public void setSysUser(SysUser sysUser) { this.sysUser = sysUser; } } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUserApplet.java
New file @@ -0,0 +1,57 @@ package com.ruoyi.system.api.model; import lombok.Data; import java.io.Serializable; /** * 用户信息 小程序登录使用 * * @author 无关风月 */ @Data public class LoginUserApplet implements Serializable { private static final long serialVersionUID = 1L; /** * 用户唯一标识 */ private String token; /** * 用户姓名 */ private String name; /** * 用户名id */ private Long userId; private String userIdStr; /** * 用户手机号 */ private String phone; /** * 登录时间 */ private Long loginTime; /** * 过期时间 */ private Long expireTime; /** * 登录IP地址 */ private String ipaddr; /** * 头像 */ private String avatar; /** * 地址 */ private String address; } ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
@@ -14,7 +14,6 @@ import com.ruoyi.common.core.utils.ip.IpUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.RemoteUserService; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.model.LoginUser; ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java
@@ -4,6 +4,8 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ruoyi.system.api.model.SysOperLog; import org.apache.commons.lang3.ArrayUtils; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; @@ -27,7 +29,7 @@ import com.ruoyi.common.log.filter.PropertyPreExcludeFilter; import com.ruoyi.common.log.service.AsyncLogService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.domain.SysOperLog; /** * 操作日志记录处理 ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java
@@ -1,11 +1,10 @@ package com.ruoyi.common.log.service; import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.system.api.model.SysOperLog; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.system.api.RemoteLogService; import com.ruoyi.system.api.domain.SysOperLog; import javax.annotation.Resource; ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -6,6 +6,7 @@ import javax.servlet.http.HttpServletRequest; import com.ruoyi.common.core.exception.user.UserAppletException; import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.LoginUserApplet; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -18,7 +19,6 @@ import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.model.LoginUser; /** * token验证处理 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java
File was deleted ruoyi-service/ruoyi-account/pom.xml
@@ -117,6 +117,10 @@ <version>2.6</version> <scope>compile</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> <build> ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -1,8 +1,20 @@ package com.ruoyi.account.controller; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.service.AppUserService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.service.TokenService; import org.junit.Test; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import javax.annotation.Resource; import java.util.List; /** * <p> @@ -15,6 +27,27 @@ @RestController @RequestMapping("/app-user") public class AppUserController { @Resource private TokenService tokenService; @Resource private AppUserService appUserService; @PostMapping("/index") @ApiOperation(value = "个人中心首页", tags = {"小程序-个人中心首页"}) @Test public void index(){ System.err.println("=-===="); // Long userId = tokenService.getLoginUserApplet().getUserId(); } public void test(Long userId,Integer count){ List<AppUser> list = appUserService.lambdaQuery().eq(AppUser::getInviteUserId, userId).list(); count = count + list.size(); for (AppUser appUser : list) { test(appUser.getId(),count); } } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/filter/AuthFilter.java
@@ -2,11 +2,9 @@ import com.alibaba.fastjson.JSON; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.service.IAppUserService; import com.ruoyi.common.core.constant.TokenConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.system.api.domain.SysUser; import org.apache.logging.log4j.core.config.Order; import org.slf4j.Logger; import org.slf4j.LoggerFactory; ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserService.java
New file @@ -0,0 +1,44 @@ package com.ruoyi.account.service; import com.baomidou.mybatisplus.extension.service.IService; import java.util.Map; /** * <p> * 服务类 * </p> * * @author luodangjia * @since 2024-08-06 */ public interface TAppUserService extends IService<TAppUser> { /** * 微信小程序登录用户封装 * @param appletUserDecodeData * @return */ Map<String, Object> wxLogin(AppletUserDecodeData appletUserDecodeData,Long inviteUserId); /** * 支付宝小程序登录用户封装 * @param response * @return */ // Map<String, Object> aliLogin(AlipaySystemOauthTokenResponse response, AlipayUserInfoShareResponse userInfo); Map<String, Object> aliLogin(AlipaySystemOauthTokenResponse response,String phone,Long inviteUserId); /** * 封装用户信息和token * @param appUser * @return */ Map<String, Object> getUserInfo(TAppUser appUser); /** * 账号判断 * @param status */ public void throwInfo(Integer status); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/weChat/WeChatUtil.java
@@ -1,203 +1,203 @@ package com.ruoyi.account.util.weChat; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; /** * 微信工具类 */ @Slf4j @Component public class WeChatUtil { @Value("${wx.appletsAppid}") private String wxAppletsAppid; @Value("${wx.appletsAppSecret}") private String wxAppletsAppSecret; @Value("{wx.officialAccountAppSecret}") private String officialAccountAppSecret; @Value("${wx.appid}") private String webAppId; @Value("${wx.appSecret}") private String webAppSecret; /** * 小程序使用jscode获取openid * @param jscode * @return */ public Map<String, Object> code2Session(String jscode) throws Exception{ String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxAppletsAppid + "&secret=" + wxAppletsAppSecret + "&js_code=" + jscode + "&grant_type=authorization_code"; HttpRequest get = HttpUtil.createGet(url); HttpResponse response = get.execute(); int status = response.getStatus(); if(200 != status){ throw new RuntimeException(response.body()); } JSONObject jsonObject = JSON.parseObject(response.body()); int errcode = jsonObject.getIntValue("errcode"); Map<String, Object> map = new HashMap<>(); map.put("errcode", errcode); if(errcode == 0){//成功 map.put("openid", jsonObject.getString("openid")); map.put("sessionKey", jsonObject.getString("session_key")); map.put("unionid", jsonObject.getString("unionid")); return map; } if(errcode == -1){//系统繁忙,此时请开发者稍候再试 map.put("msg", jsonObject.getString("errmsg")); return map; } if(errcode == 40029){//code 无效 map.put("msg", jsonObject.getString("errmsg")); return map; } if(errcode == 45011){//频率限制,每个用户每分钟100次 map.put("msg", jsonObject.getString("errmsg")); return map; } return null; } /** * 获取微信小程序token * @return */ public String getWxAppletsAccessToken() throws Exception{ String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wxAppletsAppid + "&secret=" + wxAppletsAppSecret; HttpRequest get = HttpUtil.createGet(url); HttpResponse response = get.execute(); if(response.getStatus() != 200){ return ""; } JSONObject jsonObject = JSON.parseObject(response.body()); return jsonObject.getString("access_token"); } /** * 网站应用登录 * @param code * @return */ public Map<String, String> webAccessToken(String code) throws Exception{ String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + webAppId + "&secret=" + webAppSecret + "&code=" + code + "&grant_type=authorization_code"; HttpRequest get = HttpUtil.createGet(url); HttpResponse response = get.execute(); if(response.getStatus() != 200){ return null; } JSONObject jsonObject = JSON.parseObject(response.body()); int errcode = jsonObject.getIntValue("errcode"); Map<String, String> map = new HashMap<>(); if(errcode == 0){//成功 map.put("access_token", jsonObject.getString("access_token")); map.put("openid", jsonObject.getString("openid")); map.put("refresh_token", jsonObject.getString("refresh_token")); map.put("unionid", jsonObject.getString("unionid")); return map; } if(errcode == -1){//系统繁忙,此时请开发者稍候再试 map.put("msg", jsonObject.getString("errmsg")); return map; } if(errcode == 40029){//code 无效 map.put("msg", jsonObject.getString("errmsg")); return map; } if(errcode == 45011){//频率限制,每个用户每分钟100次 map.put("msg", jsonObject.getString("errmsg")); return map; } return map; } /** * 获取微信个人信息 * @param access_token * @param openid * @return */ public Map<String, Object> getUserInfo(String access_token, String openid) throws Exception{ String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid; HttpRequest get = HttpUtil.createGet(url); HttpResponse response = get.execute(); if(response.getStatus() != 200){ return null; } JSONObject jsonObject = JSON.parseObject(response.body()); int errcode = jsonObject.getIntValue("errcode"); Map<String, Object> map = new HashMap<>(); if(errcode == 0){//成功 map.put("nickname", jsonObject.getString("nickname")); map.put("openid", jsonObject.getString("openid")); map.put("sex", jsonObject.getString("sex")); map.put("headimgurl", jsonObject.getString("headimgurl")); return map; } if(errcode == -1){//系统繁忙,此时请开发者稍候再试 map.put("msg", jsonObject.getString("errmsg")); return map; } if(errcode == 40029){//code 无效 map.put("msg", jsonObject.getString("errmsg")); return map; } if(errcode == 45011){//频率限制,每个用户每分钟100次 map.put("msg", jsonObject.getString("errmsg")); return map; } return map; } //package com.ruoyi.account.util.weChat; // //import cn.hutool.http.HttpRequest; //import cn.hutool.http.HttpResponse; //import cn.hutool.http.HttpUtil; //import com.alibaba.fastjson.JSON; //import com.alibaba.fastjson.JSONObject; //import lombok.extern.slf4j.Slf4j; //import org.springframework.beans.factory.annotation.Value; //import org.springframework.stereotype.Component; //import java.util.HashMap; //import java.util.Map; // ///** // * 微信工具类 // */ //@Slf4j //@Component //public class WeChatUtil { // // @Value("${wx.appletsAppid}") // private String wxAppletsAppid; // // @Value("${wx.appletsAppSecret}") // private String wxAppletsAppSecret; // // @Value("{wx.officialAccountAppSecret}") // private String officialAccountAppSecret; // // @Value("${wx.appid}") // private String webAppId; // // @Value("${wx.appSecret}") // private String webAppSecret; // // // /** // * 获取小程序二维码 // * @param page 跳转页 例如 pages/index/index // * @param scene 参数 a=1&b=2 // * 小程序使用jscode获取openid // * @param jscode // * @return // */ // public InputStream getwxacodeunlimit(String page, String scene){ // try { // String token = getWxAppletsAccessToken(); // if(StringUtils.isEmpty(token)){ // System.err.println("获取接口调用凭证失败"); // } // String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + token; // Map<String, Object> param = new HashMap<>(); // param.put("scene", scene); // param.put("page", page); // HttpHeaders httpHeaders = new HttpHeaders(); // MediaType type=MediaType.parseMediaType("application/json;charset=UTF-8"); // httpHeaders.setContentType(type); // HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(param, httpHeaders); // ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class, new Object[0]); // String body1 = exchange.getBody(); //// System.err.println(body1); // ResponseEntity<byte[]> entity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]); // byte[] body = entity.getBody(); //// System.err.println(Base64.encodeBase64String(body)); // return new ByteArrayInputStream(body); // }catch (Exception e){ // e.printStackTrace(); // public Map<String, Object> code2Session(String jscode) throws Exception{ // String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxAppletsAppid + "&secret=" + wxAppletsAppSecret // + "&js_code=" + jscode + "&grant_type=authorization_code"; // HttpRequest get = HttpUtil.createGet(url); // HttpResponse response = get.execute(); // int status = response.getStatus(); // if(200 != status){ // throw new RuntimeException(response.body()); // } // JSONObject jsonObject = JSON.parseObject(response.body()); // int errcode = jsonObject.getIntValue("errcode"); // Map<String, Object> map = new HashMap<>(); // map.put("errcode", errcode); // if(errcode == 0){//成功 // map.put("openid", jsonObject.getString("openid")); // map.put("sessionKey", jsonObject.getString("session_key")); // map.put("unionid", jsonObject.getString("unionid")); // return map; // } // if(errcode == -1){//系统繁忙,此时请开发者稍候再试 // map.put("msg", jsonObject.getString("errmsg")); // return map; // } // if(errcode == 40029){//code 无效 // map.put("msg", jsonObject.getString("errmsg")); // return map; // } // if(errcode == 45011){//频率限制,每个用户每分钟100次 // map.put("msg", jsonObject.getString("errmsg")); // return map; // } // return null; // } } // // // /** // * 获取微信小程序token // * @return // */ // public String getWxAppletsAccessToken() throws Exception{ // String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wxAppletsAppid + "&secret=" + wxAppletsAppSecret; // HttpRequest get = HttpUtil.createGet(url); // HttpResponse response = get.execute(); // if(response.getStatus() != 200){ // return ""; // } // JSONObject jsonObject = JSON.parseObject(response.body()); // return jsonObject.getString("access_token"); // } // // // /** // * 网站应用登录 // * @param code // * @return // */ // public Map<String, String> webAccessToken(String code) throws Exception{ // String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + webAppId + "&secret=" + webAppSecret + "&code=" + code + "&grant_type=authorization_code"; // HttpRequest get = HttpUtil.createGet(url); // HttpResponse response = get.execute(); // if(response.getStatus() != 200){ // return null; // } // JSONObject jsonObject = JSON.parseObject(response.body()); // int errcode = jsonObject.getIntValue("errcode"); // Map<String, String> map = new HashMap<>(); // if(errcode == 0){//成功 // map.put("access_token", jsonObject.getString("access_token")); // map.put("openid", jsonObject.getString("openid")); // map.put("refresh_token", jsonObject.getString("refresh_token")); // map.put("unionid", jsonObject.getString("unionid")); // return map; // } // if(errcode == -1){//系统繁忙,此时请开发者稍候再试 // map.put("msg", jsonObject.getString("errmsg")); // return map; // } // if(errcode == 40029){//code 无效 // map.put("msg", jsonObject.getString("errmsg")); // return map; // } // if(errcode == 45011){//频率限制,每个用户每分钟100次 // map.put("msg", jsonObject.getString("errmsg")); // return map; // } // return map; // } // // // /** // * 获取微信个人信息 // * @param access_token // * @param openid // * @return // */ // public Map<String, Object> getUserInfo(String access_token, String openid) throws Exception{ // String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid; // HttpRequest get = HttpUtil.createGet(url); // HttpResponse response = get.execute(); // if(response.getStatus() != 200){ // return null; // } // JSONObject jsonObject = JSON.parseObject(response.body()); // int errcode = jsonObject.getIntValue("errcode"); // Map<String, Object> map = new HashMap<>(); // if(errcode == 0){//成功 // map.put("nickname", jsonObject.getString("nickname")); // map.put("openid", jsonObject.getString("openid")); // map.put("sex", jsonObject.getString("sex")); // map.put("headimgurl", jsonObject.getString("headimgurl")); // return map; // } // if(errcode == -1){//系统繁忙,此时请开发者稍候再试 // map.put("msg", jsonObject.getString("errmsg")); // return map; // } // if(errcode == 40029){//code 无效 // map.put("msg", jsonObject.getString("errmsg")); // return map; // } // if(errcode == 45011){//频率限制,每个用户每分钟100次 // map.put("msg", jsonObject.getString("errmsg")); // return map; // } // return map; // } // // // // //// /** //// * 获取小程序二维码 //// * @param page 跳转页 例如 pages/index/index //// * @param scene 参数 a=1&b=2 //// */ //// public InputStream getwxacodeunlimit(String page, String scene){ //// try { //// String token = getWxAppletsAccessToken(); //// if(StringUtils.isEmpty(token)){ //// System.err.println("获取接口调用凭证失败"); //// } //// String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + token; //// Map<String, Object> param = new HashMap<>(); //// param.put("scene", scene); //// param.put("page", page); //// HttpHeaders httpHeaders = new HttpHeaders(); //// MediaType type=MediaType.parseMediaType("application/json;charset=UTF-8"); //// httpHeaders.setContentType(type); //// HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(param, httpHeaders); //// ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class, new Object[0]); //// String body1 = exchange.getBody(); ////// System.err.println(body1); //// ResponseEntity<byte[]> entity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]); //// byte[] body = entity.getBody(); ////// System.err.println(Base64.encodeBase64String(body)); //// return new ByteArrayInputStream(body); //// }catch (Exception e){ //// e.printStackTrace(); //// } //// return null; //// } //} ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BannerController.java
@@ -1,6 +1,7 @@ package com.ruoyi.other.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.other.api.domain.Banner; @@ -8,10 +9,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.ibatis.annotations.Param; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @@ -30,8 +28,8 @@ public class BannerController { @Resource private BannerService bannerService; @GetMapping("/list") @ApiOperation(value = "列表", tags = {"小程序-banner"}) @PostMapping("/index/list") @ApiOperation(value = "banner列表", tags = {"小程序-首页"}) public R<List<Banner>> list(String name, Integer jumpType, Integer position){ List<Banner> list = bannerService.lambdaQuery().like(StringUtils.isNotEmpty(name), Banner::getName, name) .eq(Banner::getJumpType, jumpType) @@ -39,6 +37,40 @@ .list(); return R.ok(list); } @PostMapping("/add") @ApiOperation(value = "添加", tags = {"后台-广告管理-banner管理"}) public R add(@RequestBody Banner banner){ bannerService.save(banner); return R.ok(); } @PostMapping("/delete") @ApiOperation(value = "删除", tags = {"后台-广告管理-banner管理"}) public R delete(@RequestParam Integer id){ bannerService.removeById(id); return R.ok(); } @PostMapping("/edit") @ApiOperation(value = "修改", tags = {"后台-广告管理-banner管理"}) public R edit(@RequestBody Banner banner){ bannerService.updateById(banner); return R.ok(); } @PostMapping("/detail") @ApiOperation(value = "详情", tags = {"后台-广告管理-banner管理"}) public R detail(@RequestParam Integer id){ Banner byId = bannerService.getById(id); return R.ok(byId); } @PostMapping("/page/list") @ApiOperation(value = "列表", tags = {"后台-广告管理--banner"}) public R<Page<Banner>> pagelist(String name, Integer jumpType, Integer position,Integer pageNum,Integer pageSize){ Page<Banner> page = bannerService.lambdaQuery().like(StringUtils.isNotEmpty(name), Banner::getName, name) .eq(Banner::getJumpType, jumpType) .eq(Banner::getPosition, position) .page(Page.of(pageNum, pageSize)); return R.ok(page); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsCategoryController.java
@@ -1,10 +1,16 @@ package com.ruoyi.other.controller; import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.GoodsCategory; import com.ruoyi.other.service.GoodsCategoryService; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * <p> @@ -17,7 +23,18 @@ @RestController @RequestMapping("/goods-category") public class GoodsCategoryController { @Resource private GoodsCategoryService goodsCategoryService; @PostMapping("/index/list") @ApiOperation(value = "商品分类", tags = {"小程序-首页"}) public R<List<GoodsCategory>> list(){ List<GoodsCategory> list = goodsCategoryService.lambdaQuery() .orderByDesc(GoodsCategory::getCreateTime) .last("limit 8") .list() ; return R.ok(list); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/SystemConfigController.java
@@ -1,16 +1,17 @@ package com.ruoyi.other.controller; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.SystemConfig; import com.ruoyi.other.api.dto.IndexConfigSetDto; import com.ruoyi.other.service.SystemConfigService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.ApiOperation; import javax.annotation.Resource; import java.util.List; /** * <p> @@ -25,11 +26,29 @@ public class SystemConfigController { @Resource private SystemConfigService systemConfigService; @GetMapping("/byType") @ApiOperation(value = "1=启动页管理,2=首页配置,3=订单包邮设置", tags = {"小程序-启动页面","小程序-首页","订单包邮配置"}) public R<SystemConfig> byType(Integer type){ SystemConfig one = systemConfigService.lambdaQuery().eq(SystemConfig::getType, type).last("limit 1").one(); return R.ok(one); @PostMapping("/index/add") @ApiOperation(value = "添加", tags = {"后台-广告管理-首页配置"}) public R add(@RequestBody IndexConfigSetDto indexConfigSetDto){ //先删除type=2的数据 List<SystemConfig> list = systemConfigService.lambdaQuery().eq(SystemConfig::getType, 2).list(); systemConfigService.removeBatchByIds(list); SystemConfig systemConfig = new SystemConfig(); systemConfig.setType(2); systemConfig.setContent(JSON.toJSONString(indexConfigSetDto)); systemConfigService.save(systemConfig); return R.ok(); } @PostMapping("/index/detail") @ApiOperation(value = "宣传图片-公司简介", tags = {"后台-广告管理-首页配置","小程序-首页"}) public R<IndexConfigSetDto> detail(){ SystemConfig one = systemConfigService.lambdaQuery().eq(SystemConfig::getType, 2).one(); if (one==null){ return R.ok(); } IndexConfigSetDto indexConfigSetDto = JSONObject.parseObject(one.getContent(), IndexConfigSetDto.class); return R.ok(indexConfigSetDto); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianController.java
@@ -1,9 +1,23 @@ package com.ruoyi.other.controller; import org.springframework.web.bind.annotation.RequestMapping; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.other.api.domain.GoodsEvaluate; import com.ruoyi.other.api.domain.Technician; import com.ruoyi.other.api.domain.TechnicianSubscribe; import com.ruoyi.other.api.feignClient.OrderClient; import com.ruoyi.other.service.GoodsEvaluateService; import com.ruoyi.other.service.TechnicianService; import com.ruoyi.other.service.TechnicianSubscribeService; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; /** * <p> @@ -16,6 +30,72 @@ @RestController @RequestMapping("/technician") public class TechnicianController { @Resource private TechnicianService technicianService; @Resource private GoodsEvaluateService goodsEvaluateService; @Resource private OrderClient orderClient; @Resource private TechnicianSubscribeService technicianSubscribeService; @Resource private TokenService tokenService; @PostMapping("/shop/list") @ApiOperation(value = "获取门店的技师列表", tags = {"小程序-门店详情-技师预约"}) public R<Page<Technician>> shoplist(@RequestParam Integer shopId,@RequestParam Integer pageNum,@RequestParam Integer pageSize){ //查出技师列表 Page<Technician> page = technicianService.lambdaQuery().eq(Technician::getShopId, shopId).eq(Technician::getStatus, 2).page(Page.of(pageNum, pageSize)); for (Technician technician : page.getRecords()) { //查出技师订单 R<List<Long>> orderIdsByTechId = orderClient.getOrderIdsByTechId(technician.getId()); if (orderIdsByTechId.getData().isEmpty()){ technician.setGrade(new BigDecimal(0)); technician.setServeCount(0); continue; } //查出技师评价 List<GoodsEvaluate> list = goodsEvaluateService.lambdaQuery().in(GoodsEvaluate::getOrderId, orderIdsByTechId.getData()).list(); //算出平均分并保留一位小数 BigDecimal avg = list.stream().map(GoodsEvaluate::getGrade).reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal(list.size()), 1, BigDecimal.ROUND_HALF_UP); technician.setGrade(avg); technician.setServeCount(orderIdsByTechId.getData().size()); } return R.ok(page); } @PostMapping("/shop/detail") @ApiOperation(value = "获取门店的技师详情", tags = {"小程序-门店详情-技师预约"}) public R<Technician> shopdetail(@RequestParam Integer techId){ //查出技师列表 Technician technician = technicianService.getById(techId); //查出技师订单 R<List<Long>> orderIdsByTechId = orderClient.getOrderIdsByTechId(technician.getId()); if (orderIdsByTechId.getData().isEmpty()){ technician.setGrade(new BigDecimal(0)); technician.setServeCount(0); return R.ok(technician); } //查出技师评价 List<GoodsEvaluate> list = goodsEvaluateService.lambdaQuery().in(GoodsEvaluate::getOrderId, orderIdsByTechId.getData()).list(); //算出平均分并保留一位小数 BigDecimal avg = list.stream().map(GoodsEvaluate::getGrade).reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal(list.size()), 1, BigDecimal.ROUND_HALF_UP); technician.setGrade(avg); technician.setServeCount(orderIdsByTechId.getData().size()); return R.ok(technician); } @PostMapping("/shop/tech") @ApiOperation(value = "预约操作", tags = {"小程序-门店详情-技师预约"}) public R<Technician> shoptech(@RequestBody TechnicianSubscribe subscribe){ Long userId = tokenService.getLoginUserApplet().getUserId(); subscribe.setAppUserId(userId); technicianSubscribeService.save(subscribe); return R.ok(); } }