diff --git a/mallinkAdmin/pom.xml b/mallinkAdmin/pom.xml
index 43afbdba7..3e3e3f8d8 100644
--- a/mallinkAdmin/pom.xml
+++ b/mallinkAdmin/pom.xml
@@ -34,6 +34,18 @@
1.3.3
+
+ com.google.zxing
+ core
+ 3.3.3
+
+
+
+ com.github.axet
+ kaptcha
+ 0.0.9
+
+
diff --git a/mallinkAdmin/src/main/java/com/iformall/UserApplication.java b/mallinkAdmin/src/main/java/com/iformall/UserApplication.java
index f1c776d8b..f72f27524 100644
--- a/mallinkAdmin/src/main/java/com/iformall/UserApplication.java
+++ b/mallinkAdmin/src/main/java/com/iformall/UserApplication.java
@@ -1,6 +1,7 @@
package com.iformall;
import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
+import org.rocketmq.starter.annotation.EnableRocketMQ;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -18,6 +19,7 @@ import tk.mybatis.spring.annotation.MapperScan;
@EnableSwagger2
@EnableEncryptableProperties
@EnableAsync
+@EnableRocketMQ
public class UserApplication {
@Value("${fm.exception}")
diff --git a/mallinkAdmin/src/main/java/com/iformall/config/RedisConfig.java b/mallinkAdmin/src/main/java/com/iformall/config/RedisConfig.java
index 2e6e9bc63..0cd431813 100644
--- a/mallinkAdmin/src/main/java/com/iformall/config/RedisConfig.java
+++ b/mallinkAdmin/src/main/java/com/iformall/config/RedisConfig.java
@@ -1,6 +1,7 @@
package com.iformall.config;
import com.iformall.domain.po.PushLimit;
+import com.iformall.domain.po.WxCUser;
import com.iformall.domain.po.WxScoreRules;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -109,4 +110,36 @@ public class RedisConfig extends CachingConfigurerSupport {
return template;
}
+ @Bean("openRedisTemplate")
+ public RedisTemplate getWeChatOpen(RedisConnectionFactory connectionFactory) {
+ RedisTemplate template = new RedisTemplate();
+
+ // value值的序列化
+ template.setValueSerializer(new StringRedisSerializer());
+
+ // key的序列化
+ template.setKeySerializer(new StringRedisSerializer());
+ template.setHashKeySerializer(new StringRedisSerializer());
+
+ template.setConnectionFactory(connectionFactory);
+ return template;
+ }
+
+ @Bean("cuserTokenRedisTemplate")
+ public RedisTemplate getCUserTokenRedisTemplate(RedisConnectionFactory connectionFactory) {
+ RedisTemplate template = new RedisTemplate();
+
+ Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxCUser.class);
+ // value值的序列化
+ template.setValueSerializer(j);
+ template.setHashKeySerializer(j);
+
+ // key的序列化
+ template.setKeySerializer(new StringRedisSerializer());
+ template.setHashKeySerializer(new StringRedisSerializer());
+
+ template.setConnectionFactory(connectionFactory);
+ return template;
+ }
+
}
diff --git a/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java b/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java
index eea18fcdc..e835e2477 100644
--- a/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java
+++ b/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java
@@ -94,16 +94,32 @@ public class ShiroConfig {
//拦截器.
Map filterChainDefinitionMap = new LinkedHashMap();
- //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
- filterChainDefinitionMap.put("/logout", "anon");
//filterChainDefinitionMap.put("/ue/**", "anon");
//filterChainDefinitionMap.put("/config.json", "anon");
+ // login
filterChainDefinitionMap.put("/doLogin/**", "anon");
filterChainDefinitionMap.put("/bHidLogin/**", "anon");
+ filterChainDefinitionMap.put("/sendLoginPhoneCode/**", "anon");
+ filterChainDefinitionMap.put("/doLoginByPhone/**", "anon");
+ filterChainDefinitionMap.put("/wechat/callback", "anon"); // 微信第三方登录callback
+ filterChainDefinitionMap.put("/wechat/weChatUserLogin", "anon"); // 微信第三方登录绑定
+ // callback
+ filterChainDefinitionMap.put("/wxPay/notify/**", "anon"); // 支付回调
+ filterChainDefinitionMap.put("/wxPayBill/notify/**", "anon");
+ filterChainDefinitionMap.put("/wxMsgCallback/**", "anon");
+ filterChainDefinitionMap.put("/user/sendvalidationcode", "anon");
+ filterChainDefinitionMap.put("/user/updatepwd", "anon");
+ filterChainDefinitionMap.put("/carCallback/**", "anon");
+ filterChainDefinitionMap.put("/wxMallApply/add", "anon");
+ filterChainDefinitionMap.put("/wxMallApply/sendvalidationcode", "anon");
+
+ // static files
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/img/**", "anon");
filterChainDefinitionMap.put("/font-awesome/**", "anon");
+ // 验证码
+ filterChainDefinitionMap.put("/captcha.jpg", "anon");
//:这是一个坑呢,一不小心代码就不好使了;
//
//自定义加载权限资源关系
@@ -116,22 +132,20 @@ public class ShiroConfig {
// filterChainDefinitionMap.put(resources.getUrl(),permission);
// }
// }
+ // swagger-ui
filterChainDefinitionMap.put("/swagger-ui.html", "anon");
- filterChainDefinitionMap.put("/wxPay/notify/**", "anon");
- filterChainDefinitionMap.put("/wxOpen/**", "anon");
- filterChainDefinitionMap.put("/wxPayBill/notify/**", "anon");
filterChainDefinitionMap.put("/v2/**", "anon");
filterChainDefinitionMap.put("/swagger-resources/**", "anon");
filterChainDefinitionMap.put("/webjars/**", "anon");
- filterChainDefinitionMap.put("/wxMsgCallback/**", "anon");
- filterChainDefinitionMap.put("/user/sendvalidationcode", "anon");
- filterChainDefinitionMap.put("/user/updatepwd", "anon");
- filterChainDefinitionMap.put("/carCallback/**", "anon");
- filterChainDefinitionMap.put("/wxMallApply/add", "anon");
- filterChainDefinitionMap.put("/wxMallApply/sendvalidationcode", "anon");
- filterChainDefinitionMap.put("/captcha.jpg", "anon");
+
filterChainDefinitionMap.put("/version", "anon");
+ filterChainDefinitionMap.put("/wxDeviceScreenAd/**", "anon");
// filterChainDefinitionMap.put("/role/**", "corsFilter,token");
+
+
+ //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
+ filterChainDefinitionMap.put("/logout", "authc");
+
filterChainDefinitionMap.put("/**", "corsFilter,token,authc");
// filterChainDefinitionMap.put("/**", "anon");
diff --git a/mallinkAdmin/src/main/java/com/iformall/config/WechatMpConfig.java b/mallinkAdmin/src/main/java/com/iformall/config/WechatMpConfig.java
new file mode 100644
index 000000000..4dff6c762
--- /dev/null
+++ b/mallinkAdmin/src/main/java/com/iformall/config/WechatMpConfig.java
@@ -0,0 +1,33 @@
+package com.iformall.config;
+
+import me.chanjar.weixin.mp.api.WxMpConfigStorage;
+import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+@Component
+public class WechatMpConfig {
+
+ @Autowired
+ private WechatWebProperties wechatWebProperties;
+
+ @Bean
+ public WxMpService wxMpService() {
+ //创建WxMpService实例并设置appid和sectret
+ WxMpService wxMpService = new WxMpServiceImpl();
+ //这里的设置方式是跟着这个sdk的文档写的
+ wxMpService.setWxMpConfigStorage(wxConfigProvider());
+ return wxMpService;
+ }
+
+ @Bean
+ public WxMpConfigStorage wxConfigProvider(){
+ WxMpInMemoryConfigStorage wxConfigProvider = new WxMpInMemoryConfigStorage();
+ wxConfigProvider.setAppId(wechatWebProperties.getAppId());
+ wxConfigProvider.setSecret(wechatWebProperties.getSecret());
+ return wxConfigProvider;
+ }
+}
diff --git a/mallinkAdmin/src/main/java/com/iformall/config/WechatWebProperties.java b/mallinkAdmin/src/main/java/com/iformall/config/WechatWebProperties.java
new file mode 100644
index 000000000..0b9047399
--- /dev/null
+++ b/mallinkAdmin/src/main/java/com/iformall/config/WechatWebProperties.java
@@ -0,0 +1,59 @@
+package com.iformall.config;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * Stormeye
+ */
+@Component
+@ConfigurationProperties(prefix = "wechat.web")
+public class WechatWebProperties {
+ /**
+ * 设置微信第三方平台-微信登录的web应用appid
+ */
+ private String appId;
+
+ /**
+ * 设置微信第三方平台-微信登录的web应用app secret
+ */
+ private String secret;
+
+ /**
+ * 网页URL
+ * @return
+ */
+ private String url;
+
+ public String getAppId() {
+ return appId;
+ }
+
+ public void setAppId(String appId) {
+ this.appId = appId;
+ }
+
+ public String getSecret() {
+ return secret;
+ }
+
+ public void setSecret(String secret) {
+ this.secret = secret;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this,
+ ToStringStyle.MULTI_LINE_STYLE);
+ }
+}
diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java b/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java
index b49bb0d26..53b6369fd 100644
--- a/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java
+++ b/mallinkAdmin/src/main/java/com/iformall/controller/BaseController.java
@@ -19,6 +19,7 @@ import javax.servlet.http.HttpServletRequest;
@RestController
public class BaseController {
+
@InitBinder
public void InitBinder(WebDataBinder dataBinder) {
dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java b/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java
index 80d3664f9..b6526d4ea 100644
--- a/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java
+++ b/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java
@@ -1,25 +1,28 @@
package com.iformall.controller;
-import com.github.pagehelper.PageInfo;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
import com.iformall.common.ErrorCode;
+import com.iformall.common.Result;
import com.iformall.common.ResultData;
-import com.iformall.domain.po.MallRolePermission;
-import com.iformall.domain.po.MallUserInfo;
-import com.iformall.domain.po.MallUserRole;
+import com.iformall.domain.po.*;
+import com.iformall.domain.vo.MallUserInfoVo;
+import com.iformall.enums.EnumMallUserStatus;
+import com.iformall.enums.EnumMsgModel;
import com.iformall.exception.MallinkException;
-import com.iformall.service.MallRolePermissionService;
-import com.iformall.service.MallUserInfoService;
-import com.iformall.service.MallUserRoleService;
+import com.iformall.service.*;
import com.iformall.shiro.UserSession;
import com.iformall.shiro.UseriFormallToken;
import com.iformall.utils.ShiroUtils;
import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.DisabledAccountException;
+import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
@@ -31,9 +34,13 @@ import org.springframework.web.bind.annotation.*;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
+import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.List;
+import java.util.Map;
@RestController
@@ -54,7 +61,10 @@ public class HomeController extends BaseController {
private MallUserRoleService mallUserRoleService;
@Autowired
- private MallRolePermissionService mallRolePermissionService;
+ private WxAppinfoService appinfoService;
+
+ @Autowired
+ private WxMsgValidationcodeService wxMsgValidationcodeService;
@GetMapping("/captcha.jpg")
public void captcha(HttpServletResponse response)throws ServletException, IOException {
@@ -76,7 +86,7 @@ public class HomeController extends BaseController {
@ApiOperation("登录")
@PostMapping("/doLogin")
- public ResultData login(@RequestBody MallUserInfo user) {
+ public ResultData login(@RequestBody MallUserInfo user, HttpServletResponse response) {
logger.debug("[" + getIpAddr() + "] HomeController::login");
try {
String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY);
@@ -92,97 +102,101 @@ public class HomeController extends BaseController {
ResultData data = new ResultData();
if (StringUtils.isBlank(user.getUsername()) || StringUtils.isBlank(user.getPassword())) {
// throw new SystemException(ErrorCode.LOGIN_USER_OR_PWD_ERROR);
- return new ResultData(ResultData.ERROR, "用户名或者密码错误");
+ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
+ }
+ // check user
+ MallUserInfo userCheck = mallUserInfoService.getByUsername(user.getUsername());
+ if(userCheck == null) {
+ logger.error(ErrorCode.USER_IS_EMPTY.getMessage());
+ return new ResultData(ErrorCode.USER_IS_EMPTY);
}
+ if(userCheck.getStatus().equals(EnumMallUserStatus.NOT_VALID.getCode())) {
+ logger.error(ErrorCode.USER_IS_LOCKED.getMessage());
+ return new ResultData(ErrorCode.USER_IS_LOCKED);
+ }
+ boolean isLogin = false;
try {
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword());
subject.login(token);
-// List roleList = sysRoleService.findRoleByUserId(user.getId());
-// if (null != roleList && roleList.size() > 0) {
-// List permissionList = sysPermissionService
-// .findPermissionByRoleIds(roleList.stream().map(MallRole::getId).collect(Collectors.toList()));
-// user.setRole(roleList);
-// user.setPermission(permissionList);
-// }
+ isLogin = true;
+ } catch (UnknownAccountException e) {
+ logger.error(e.getMessage());
+ return new ResultData(ErrorCode.USER_IS_EMPTY);
+ } catch (DisabledAccountException e) {
+ logger.error(e.getMessage());
+ return new ResultData(ErrorCode.USER_IS_LOCKED);
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ return new ResultData(ErrorCode.USER_PASSWD_ERR);
+ }
+ if(isLogin) {
MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
info.setPassword("保密");
-// System.out.println("id:"+ SecurityUtils.getSubject().getSession().getId());
- String menus = getPermissionsByRole(info);
+ if(StringUtils.isNotBlank(info.getBopenId()))
+ info.setBopenId("保密");
+ if(StringUtils.isNotBlank(info.getWebOpenId())) {
+ info.setWebOpenId("保密");
+ }
+
+ String menus = mallUserRoleService.getPermissionsByUser(info);
if(menus != null) {
info.setMenus(menus);
}
- data.data = info;
- } catch (Exception e) {
- return new ResultData(ResultData.ERROR, "用户名或者密码错误");
- }
- return data;
- }
- private String getPermissionsByRole(MallUserInfo info) {
- MallUserRole ur = new MallUserRole();
- ur.setUid(info.getId());
- PageInfo page = mallUserRoleService.listAsPage(ur, 1, 1);
- if (page.getSize() > 0) {
- Long roleId = page.getList().get(0).getRoleId();
- MallRolePermission p = new MallRolePermission();
- p.setRoleId(roleId);
- p.setTenantId(info.getTenantId());
- PageInfo listAsPage = mallRolePermissionService.listAsPage(p, 1, 100);
- String menus = "";
- for (MallRolePermission rp : listAsPage.getList()) {
- menus += rp.getPermissionId() + ",";
- }
- if (menus.length() > 0) {
- menus = menus.substring(0, menus.length() - 1);
+ try {
+ String cookieName = URLEncoder.encode(info.getUsername(), "utf-8");
+ Cookie unameCookie = new Cookie("uname", cookieName);
+ unameCookie.setMaxAge(3600);
+ response.addCookie(unameCookie);
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ return new ResultData(Result.ERROR, e.getMessage());
}
- return menus;
+
+ data.data = info;
}
- return null;
+ return data;
}
private boolean isInMobileAdmin(MallUserInfo user) {
// 检查用户是否有 移动端数据塔台 权限
boolean isInMobile = false;
- MallUserRole ur = new MallUserRole();
- ur.setUid(user.getId());
- PageInfo page = mallUserRoleService.listAsPage(ur, 1, 1);
- if (page.getSize() > 0) {
- Long roleId = page.getList().get(0).getRoleId();
- MallRolePermission p = new MallRolePermission();
- p.setRoleId(roleId);
- p.setTenantId(user.getTenantId());
- PageInfo listAsPage = mallRolePermissionService.listAsPage(p, 1, 100);
- for (MallRolePermission rp : listAsPage.getList()) {
- if (rp.getPermissionId().equals(8L)) { /// 移动端数据塔台
- isInMobile = true;
- }
- }
- }
+ isInMobile = mallUserRoleService.checkIsMobileAdmin(user);
return isInMobile;
}
@ApiOperation("B端登录")
@PostMapping("/bHidLogin")
- public ResultData bLogin(@RequestBody MallUserInfo user) {
+ public ResultData bLogin(@RequestBody MallUserInfo user, HttpServletResponse response) {
logger.debug("[" + getIpAddr() + "] HomeController::bHidLogin");
ResultData data = new ResultData();
+ // tenantId is appId
+ if(StringUtils.isBlank(user.getTenantId())) {
+ logger.error("appid信息未提供");
+ return new ResultData(ErrorCode.MALL_INFO_NOT_FOUND);
+ }
+ WxAppinfo appinfo = appinfoService.getByAppId(user.getTenantId());
+ if(appinfo == null) {
+ logger.error("appid未找到");
+ return new ResultData(ErrorCode.MALL_INFO_NOT_FOUND);
+ }
if(StringUtils.isNotBlank(user.getPhone())) {
// 领导登录
- user = mallUserInfoService.getByPhone(user.getPhone());
+ user = mallUserInfoService.getByPhone(user.getPhone(), appinfo.getTenantId());
if(user == null || !isInMobileAdmin(user)) {
- return new ResultData(ErrorCode.USER_NOT_ADMIN);
+ return new ResultData(ErrorCode.USER_NO_PERMISSION);
}
- } else if(StringUtils.isNotBlank(user.getOpenId())) {
+ } else if(StringUtils.isNotBlank(user.getBopenId())) {
// 领导登录
- user = mallUserInfoService.getByOpenId(user.getOpenId());
+ user = mallUserInfoService.getByBOpenId(user.getBopenId(), appinfo.getTenantId());
if(user == null || !isInMobileAdmin(user)) {
- return new ResultData(ErrorCode.USER_NOT_ADMIN);
+ return new ResultData(ErrorCode.USER_NO_PERMISSION);
}
} else {
if (StringUtils.isEmpty(user.getUsername()) || StringUtils.isEmpty(user.getPassword())) {
// throw new SystemException(ErrorCode.LOGIN_USER_OR_PWD_ERROR);
- return new ResultData(ResultData.ERROR, "用户名或者密码错误");
+ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
}
}
@@ -190,27 +204,128 @@ public class HomeController extends BaseController {
Subject subject = SecurityUtils.getSubject();
UseriFormallToken token = new UseriFormallToken(user.getUsername());
subject.login(token);
-// List roleList = sysRoleService.findRoleByUserId(user.getId());
-// if (null != roleList && roleList.size() > 0) {
-// List permissionList = sysPermissionService
-// .findPermissionByRoleIds(roleList.stream().map(MallRole::getId).collect(Collectors.toList()));
-// user.setRole(roleList);
-// user.setPermission(permissionList);
-// }
MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
info.setPassword("保密");
-// System.out.println("id:"+ SecurityUtils.getSubject().getSession().getId());
- String menus = getPermissionsByRole(info);
+ if(StringUtils.isNotBlank(info.getBopenId()))
+ info.setBopenId("保密");
+ if(StringUtils.isNotBlank(info.getWebOpenId())) {
+ info.setWebOpenId("保密");
+ }
+ String menus = mallUserRoleService.getPermissionsByUser(info);
if(menus != null) {
info.setMenus(menus);
}
+ String cookieName = URLEncoder.encode(info.getUsername(), "utf-8");
+ Cookie unameCookie = new Cookie("uname", cookieName);
+ unameCookie.setMaxAge(3600);
+ response.addCookie(unameCookie);
+
data.data = info;
+ } catch (MallinkException e) {
+ logger.error(e.getMessage());
+ return new ResultData(e.getErrorCode(), e.getMessage());
} catch (Exception e) {
- return new ResultData(ResultData.ERROR, "用户名或者密码错误");
+ logger.error(e.getMessage());
+ return new ResultData(ErrorCode.USER_PASSWD_ERR);
}
return data;
}
+ @GetMapping("sendLoginPhoneCode")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true)})
+ public ResultData sendLoginPhoneCode(String phone) {
+ logger.debug("[" + getIpAddr() + "] HomeController::sendlogincode");
+ // 1. 检查手机号是否在用户列表里, 是否只有一个
+ // 2. 发送手机验证码, 直接发
+ List users = mallUserInfoService.getUserByPhone(phone);
+ if(users.size() <= 0) {
+ logger.error(ErrorCode.USER_IS_EMPTY.getMessage());
+ return new ResultData(ErrorCode.USER_IS_EMPTY);
+ }
+ if(users.size() > 1) {
+ logger.error(ErrorCode.USER_IS_MULTI.getMessage());
+ return new ResultData(ErrorCode.USER_IS_MULTI);
+ }
+ MallUserInfoVo user = users.get(0);
+ if (user==null) {
+ logger.error("用户不存在, userName: " + user.getUsername());
+ return new ResultData(ErrorCode.USER_IS_EMPTY);
+ }
+ if(user.getStatus() == EnumMallUserStatus.NOT_VALID.getCode()){
+ logger.error("用户已停用, userName: " + user.getUsername());
+ return new ResultData(ErrorCode.USER_IS_LOCKED);
+ }
+ WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode();
+ wxMsgValidationcode.setPhone(phone);
+ wxMsgValidationcode.setTenantId(user.getTenantId());
+ wxMsgValidationcode.setType(EnumMsgModel.VALIDATION_CODE.getCode());
+ return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode);
+ }
+
+ @ApiOperation(value = "手机验证码登录", notes = "{\"phone\",\"string\",\"code\",\"string\"}")
+ @PostMapping("/doLoginByPhone")
+ public ResultData doLoginByPhone(@RequestBody Map params, HttpServletResponse response) {
+ logger.debug("[" + getIpAddr() + "] HomeController::doLoginByPhone");
+ // String phone,String code,String pwd
+ String phone = params.get("phone");
+ String code = params.get("code");
+
+ if (StringUtils.isBlank(phone)) {
+ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "userName不能为空");
+ }
+ if (StringUtils.isBlank(code)) {
+ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空");
+ }
+
+ // 获取用户信息列表
+ List userList = mallUserInfoService.getUserByPhone(phone);
+ if(userList.size() == 1) {
+ MallUserInfoVo user = userList.get(0);
+ // check 验证码正确
+ boolean isValidCode = false;
+ try {
+ isValidCode = mallUserInfoService.checkCodeValid(user, code);
+ } catch (Exception e) {
+ return new ResultData(Result.ERROR, e.getMessage());
+ }
+ if(isValidCode) {
+ // 验证码正确,直接登录
+ try {
+ Subject subject = SecurityUtils.getSubject();
+ UseriFormallToken token = new UseriFormallToken(user.getUsername());
+ subject.login(token);
+ MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
+ info.setPassword("保密");
+ if(StringUtils.isNotBlank(info.getBopenId()))
+ info.setBopenId("保密");
+ if(StringUtils.isNotBlank(info.getWebOpenId())) {
+ info.setWebOpenId("保密");
+ }
+ String menus = mallUserRoleService.getPermissionsByUser(info);
+ if(menus != null) {
+ info.setMenus(menus);
+ }
+
+ String cookieName = URLEncoder.encode(info.getUsername(), "utf-8");
+ Cookie unameCookie = new Cookie("uname", cookieName);
+ unameCookie.setMaxAge(3600);
+ response.addCookie(unameCookie);
+
+ return new ResultData(info);
+ } catch (MallinkException e) {
+ return new ResultData(e.getErrorCode(), e.getMessage());
+ } catch (Exception e) {
+ return new ResultData(ErrorCode.USER_PASSWD_ERR);
+ }
+ } else {
+ return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND);
+ }
+ } else {
+ return new ResultData(ErrorCode.USER_IS_EMPTY);
+ }
+ }
+
@ApiOperation("登出")
@GetMapping("/logout")
public ResultData logout() {
diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java b/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java
index b5ed99604..a2f12bee9 100644
--- a/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java
+++ b/mallinkAdmin/src/main/java/com/iformall/controller/MallUserInfoController.java
@@ -5,9 +5,11 @@ import com.iformall.common.ErrorCode;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.po.*;
+import com.iformall.domain.vo.MallUserInfoVo;
import com.iformall.enums.EnumMallUserStatus;
import com.iformall.enums.EnumUserAdmin;
import com.iformall.enums.EnumFlowPermissionType;
+import com.iformall.enums.EnumUserWechat;
import com.iformall.service.*;
import com.iformall.shiro.PasswordHelper;
import com.iformall.shiro.UserSession;
@@ -24,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.*;
+import javax.print.DocFlavor;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -81,7 +84,12 @@ public class MallUserInfoController extends BaseController {
u.setRoleId(role.getId());
}
}
- u.setPassword(null);//不返回密码
+ // 保密
+ u.setPassword(null);
+ u.setBopenId(null);
+ if(StringUtils.isNotBlank(u.getWebOpenId())) {
+ u.setWebOpenId("保密");
+ }
}
return new ResultData(page);
}
@@ -91,6 +99,12 @@ public class MallUserInfoController extends BaseController {
public ResultData detail(Long id) {
logger.debug("[" + getIpAddr() + "] MallUserInfoController::detail");
final MallUserInfo user = userInfoService.getById(id);
+ user.setPassword(null);
+ user.setBopenId(null);
+ if(StringUtils.isNotBlank(user.getWebOpenId())) {
+ user.setWebOpenId("保密");
+ }
+
return new ResultData(user);
}
@@ -103,10 +117,10 @@ public class MallUserInfoController extends BaseController {
return new ResultData(ErrorCode.USER_NOT_ADMIN.getCode(), "只有超级管理员才能添加用户");
}
- if(checkUniqueName(userInfo.getUsername(), currentUser.getTenantId()) > 0){
+ if(checkUniqueName(userInfo.getUsername()) > 0){
return new ResultData(ErrorCode.USER_NAME_IS_FOUND.getCode(),"用户名已存在");
}
- if(checkUniquePhone(userInfo.getPhone(), currentUser.getTenantId()) > 0){
+ if(checkUniquePhone(userInfo.getPhone()) > 0){
return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在");
}
Assert.notNull(userInfo.getPassword(), "密码不能为空");
@@ -137,12 +151,12 @@ public class MallUserInfoController extends BaseController {
}
MallUserInfo oldUser = userInfoService.getById(userInfo.getId());
if (!oldUser.getUsername().equals(userInfo.getUsername())) {
- if(checkUniqueName(userInfo.getUsername(), currentUser.getTenantId()) > 0){
+ if(checkUniqueName(userInfo.getUsername()) > 0){
return new ResultData(ErrorCode.USER_NAME_IS_FOUND.getCode(),"用户名已存在");
}
}
if (!oldUser.getPhone().equals(userInfo.getPhone())) {
- if(checkUniquePhone(userInfo.getPhone(), currentUser.getTenantId()) > 0){
+ if(checkUniquePhone(userInfo.getPhone()) > 0){
return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在");
}
}
@@ -211,36 +225,39 @@ public class MallUserInfoController extends BaseController {
/**
* 启用,停用用户
*
- * @param userId
- * @param status
* @return
*/
- @ApiOperation(value = "起停用户接口", response = String.class)
- @GetMapping("status")
- public ResultData modifyStatus(Long userId, Integer status) {
+ @ApiOperation(value = "起停用户接口")
+ @PostMapping("updateStatus")
+ public ResultData modifyStatus(@RequestBody MallUserInfo userInfo) {
logger.debug("[" + getIpAddr() + "] MallUserInfoController::modifyStatus");
MallUserInfo currentUser = getUser();
- if (currentUser.getIsAdmin().equals(EnumUserAdmin.Normal.getCode())) {
- return new ResultData(ErrorCode.USER_NOT_ADMIN.getCode(), "只有超级管理员才能删除用户");
+ if (currentUser.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode())) {
+ MallUserInfo userInfo1 = userInfoService.getById(userInfo.getId());
+ if(userInfo1 == null) {
+ logger.error(ErrorCode.USER_IS_EMPTY.getMessage());
+ return new ResultData(ErrorCode.USER_IS_EMPTY);
+ }
+ MallUserInfo updateUserInfo = new MallUserInfo();
+ updateUserInfo.setId(userInfo.getId());
+ updateUserInfo.setTenantId(getTenantId());
+ updateUserInfo.setStatus(userInfo.getStatus());
+ userInfoService.saveOrUpdate(userInfo);
+ return new ResultData();
+ } else {
+ return new ResultData(ErrorCode.USER_NO_PERMISSION);
}
- MallUserInfo userInfo = userInfoService.getById(userId);
- userInfo.setStatus(status);
- userInfo.setTenantId(getTenantId());
- userInfoService.saveOrUpdate(userInfo);
- return new ResultData(userInfo);
}
- private int checkUniqueName(String userName, String tenantId) {
+ private int checkUniqueName(String userName) {
MallUserInfo userQ = new MallUserInfo();
userQ.setUsername(userName);
- userQ.setTenantId(tenantId);
return userInfoService.cntUserList(userQ);
}
- private int checkUniquePhone(String phone, String tenantId) {
+ private int checkUniquePhone(String phone) {
MallUserInfo userQ = new MallUserInfo();
userQ.setPhone(phone);
- userQ.setTenantId(tenantId);
return userInfoService.cntUserList(userQ);
}
@@ -392,4 +409,5 @@ public class MallUserInfoController extends BaseController {
resultMap.put("billUserList",billUserList);
return new ResultData(resultMap);
}
+
}
diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java
new file mode 100644
index 000000000..b6a3306a3
--- /dev/null
+++ b/mallinkAdmin/src/main/java/com/iformall/controller/WechatLoginController.java
@@ -0,0 +1,338 @@
+package com.iformall.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.iformall.common.ErrorCode;
+import com.iformall.common.Result;
+import com.iformall.common.ResultData;
+import com.iformall.domain.po.MallUserInfo;
+import com.iformall.domain.vo.MallUserInfoVo;
+import com.iformall.enums.EnumUserAdmin;
+import com.iformall.exception.MallinkException;
+import com.iformall.service.MallUserInfoService;
+import com.iformall.service.MallUserRoleService;
+import com.iformall.shiro.UserSession;
+import com.iformall.shiro.UseriFormallToken;
+import com.iformall.utils.TOTP;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
+import me.chanjar.weixin.mp.bean.result.WxMpUser;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.DisabledAccountException;
+import org.apache.shiro.authc.UnknownAccountException;
+import org.apache.shiro.subject.Subject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+
+@Controller
+@RequestMapping("/wechat")
+@Slf4j
+public class WechatLoginController extends BaseController {
+ private String WECHAT_PREV = "OPEN-";
+
+ @Autowired
+ private WxMpService wxMpService;
+
+ @Autowired
+ private MallUserInfoService mallUserInfoService;
+
+ @Autowired
+ private MallUserRoleService mallUserRoleService;
+
+ @Autowired
+ @Qualifier("openRedisTemplate")
+ RedisTemplate openRedisTemplate;
+
+ @Data
+ private class DisplayUserInfo {
+ String mallName;
+ String userName;
+ String userRole;
+ }
+
+ @ApiOperation(value = "微信网页登录回调", notes = "请配置此callback到网页redirect_uri")
+ @GetMapping("callback")
+ @ResponseBody
+ public void getAccessToken(String code, String state, HttpServletRequest request, HttpServletResponse response) {
+ log.debug("[" + getIpAddr() + "] WechatLoginController::getAccessToken");
+ String host = request.getHeader("host");
+ log.debug("host: " + host);
+ log.debug("code: " + code);
+ try {
+ WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
+ log.debug("accessToken: " + accessToken.getAccessToken() + ", openId: " + accessToken.getOpenId() + ", unionId: " + accessToken.getUnionId());
+
+ // 获取 用户信息
+ WxMpUser mpUser = wxMpService.oauth2getUserInfo(accessToken, null);
+ if(mpUser != null) {
+ log.debug(mpUser.toString());
+ }
+
+ // check user openid 是否是已授权用户
+ List userList = mallUserInfoService.getUsersByWebOpenId(accessToken.getOpenId());
+ log.info("login user list count " + userList.size());
+ if(userList.size() > 0) {
+ if(userList.size() == 1) {
+ Map ret = new HashMap<>();
+ // 唯一用户
+ MallUserInfo user = userList.get(0);
+ boolean isLogin = false;
+ try {
+ Subject subject = SecurityUtils.getSubject();
+ UseriFormallToken token = new UseriFormallToken(user.getUsername());
+ subject.login(token);
+ isLogin = true;
+ } catch (UnknownAccountException e) {
+ log.error(e.getMessage());
+ ret.put("code", ErrorCode.USER_IS_EMPTY.getCode());
+ ret.put("message", e.getMessage());
+ } catch (DisabledAccountException e) {
+ log.error(e.getMessage());
+ ret.put("code", ErrorCode.USER_IS_LOCKED.getCode());
+ ret.put("message", e.getMessage());
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ ret.put("code", Result.ERROR);
+ ret.put("message", e.getMessage());
+ }
+ if(isLogin) {
+ MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
+ info.setPassword("保密");
+ info.setBopenId("保密");
+ if(StringUtils.isNotBlank(info.getWebOpenId())) {
+ info.setWebOpenId("保密");
+ }
+ String menus = mallUserRoleService.getPermissionsByUser(info);
+ if(menus != null) {
+ info.setMenus(menus);
+ }
+ try {
+ String cookieName = URLEncoder.encode(info.getUsername(), "utf-8");
+ Cookie unameCookie = new Cookie("uname", cookieName);
+ unameCookie.setMaxAge(3600);
+ response.addCookie(unameCookie);
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ ret.put("code", Result.ERROR);
+ ret.put("message", e.getMessage());
+ }
+ Object codeObj = ret.get("code");
+ if(codeObj == null) {
+ try {
+ response.sendRedirect("https://" + host + "/#/layout");
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ } else {
+ try {
+ String errCode = URLEncoder.encode(JSON.toJSONString(ret), "utf-8");
+ response.sendRedirect("https://" + host + "/#/login?errcode=" + errCode);
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ }
+ } else {
+ try {
+ String errCode = URLEncoder.encode(JSON.toJSONString(ret), "utf-8");
+ response.sendRedirect("https://" + host + "/#/login?errcode="+errCode);
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ }
+ } else {
+ // 跳转登录选择页面
+ String key = TOTP.generateWechatOpen(accessToken.getOpenId());
+ if (openRedisTemplate.opsForValue().setIfAbsent(WECHAT_PREV + key, accessToken.getOpenId())){
+ openRedisTemplate.expire(key, 30, TimeUnit.SECONDS);
+ }
+ List users = new ArrayList();
+ for(MallUserInfoVo user: userList) {
+ DisplayUserInfo disUser = new DisplayUserInfo();
+ disUser.setMallName(user.getMallName());
+ disUser.setUserName(user.getUsername());
+ disUser.setUserRole(user.getRoleName());
+ users.add(disUser);
+ }
+ String usersStr = JSON.toJSONString(users);
+ log.info(usersStr);
+ try {
+ usersStr = URLEncoder.encode(usersStr, "utf-8");
+ response.sendRedirect("https://" + host + "/#/loginselect?key=" + key + "&list=" + usersStr);
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ }
+ } else {
+ // 跳转登录页面
+ Map ret = new HashMap<>();
+ ret.put("code", ErrorCode.WECHAT_LOGIN_NOT_BIND.getCode());
+ ret.put("message", ErrorCode.WECHAT_LOGIN_NOT_BIND.getMessage());
+ try {
+ String errCode = URLEncoder.encode(JSON.toJSONString(ret), "utf-8");
+ response.sendRedirect("https://" + host + "/#/login?errcode="+errCode);
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ }
+ //return r;
+ } catch (WxErrorException e) {
+ log.error(e.getMessage());
+ }
+ }
+
+ @ApiOperation(value = "微信用户登录")
+ @GetMapping("weChatUserLogin")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "key", value = "key", dataType = "String", paramType = "query", required = true),
+ @ApiImplicitParam(name = "userName", value = "userName", dataType = "String", paramType = "query", required = true)})
+ public ResultData weChatUserLogin(String key, String userName, HttpServletRequest request, HttpServletResponse response) {
+ log.debug("[" + getIpAddr() + "] MallUserInfoController::weChatUserLogin");
+ String host = request.getHeader("host");
+ log.debug("Host: " + host);
+ if(StringUtils.isBlank(userName)) {
+ log.error("请选择要登录的用户");
+ return new ResultData(ErrorCode.WECHAT_LOGIN_USER_SELECT);
+ }
+
+ String openKey = WECHAT_PREV + key;
+ // 限时时间内查找到此用户openId
+ if (openRedisTemplate.hasKey(WECHAT_PREV + key)){
+ String openId = openRedisTemplate.opsForValue().get(openKey);
+ // 删除缓存
+ openRedisTemplate.delete(openKey);
+
+ MallUserInfo userInfo = mallUserInfoService.getByUsername(userName);
+ if(userInfo.getWebOpenId().equals(openId)) {
+ boolean isLogin = false;
+ try {
+ Subject subject = SecurityUtils.getSubject();
+ UseriFormallToken token = new UseriFormallToken(userInfo.getUsername());
+ subject.login(token);
+ MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo);
+ info.setPassword("保密");
+ info.setBopenId("保密");
+ if(StringUtils.isNotBlank(info.getWebOpenId())) {
+ info.setWebOpenId("保密");
+ }
+ String menus = mallUserRoleService.getPermissionsByUser(info);
+ if(menus != null) {
+ info.setMenus(menus);
+ }
+ // 登录cookie
+ String cookieName = URLEncoder.encode(info.getUsername(), "utf-8");
+ Cookie unameCookie = new Cookie("uname", cookieName);
+ unameCookie.setMaxAge(3600);
+ response.addCookie(unameCookie);
+
+ return new ResultData();
+ } catch (UnknownAccountException e) {
+ log.error(e.getMessage());
+ return new ResultData(ErrorCode.USER_IS_EMPTY.getCode(), e.getMessage());
+ } catch (DisabledAccountException e) {
+ log.error(e.getMessage());
+ return new ResultData(ErrorCode.USER_IS_LOCKED.getCode(), e.getMessage());
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ return new ResultData(Result.ERROR, e.getMessage());
+ }
+ } else {
+ // 登录失败
+ log.error("微信登录失败,未找到对应的openId");
+ return new ResultData(ErrorCode.WECHAT_LOGIN_KEY_OVERTIME);
+ }
+ }
+ return new ResultData(ErrorCode.WECHAT_LOGIN_KEY_OVERTIME);
+ }
+
+ @ApiOperation(value = "微信第三方登录绑定", notes = "请配置此callback到网页redirect_uri")
+ @GetMapping("bindWebOpenId")
+ public void userBindWebOpenId(String code, String state, HttpServletRequest request, HttpServletResponse response) {
+ log.debug("[" + getIpAddr() + "] WechatLoginController::bindWebOpenId");
+ String host = request.getHeader("host");
+ String errCode = null;
+ try {
+ WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
+ log.debug("accessToken: " + accessToken.getAccessToken() + ", openId: " + accessToken.getOpenId() + ", unionId: " + accessToken.getUnionId());
+
+ // 获取 用户信息
+ WxMpUser mpUser = wxMpService.oauth2getUserInfo(accessToken, null);
+ if(mpUser != null) {
+ log.debug(mpUser.toString());
+ }
+
+ String uname = state;
+ MallUserInfo user = mallUserInfoService.getByUsername(uname);
+ if(user != null) {
+ user.setWebOpenId(accessToken.getOpenId());
+ mallUserInfoService.updateWebOpenId(user);
+ log.debug("https://" + host + "/#/layout");
+ response.sendRedirect("https://" + host + "/#/layout");
+ } else {
+ log.debug("https://" + host + "/#/layout?errcode=绑定失败");
+ errCode = URLEncoder.encode("绑定失败", "utf-8");
+ response.sendRedirect("https://" + host + "/#/layout?errcode="+errCode);
+ }
+ } catch (WxErrorException e) {
+ log.error(e.getMessage());
+ errCode = e.getMessage();
+ } catch (IOException e) {
+ log.error(e.getMessage());
+ errCode = e.getMessage();
+ }
+
+ if(StringUtils.isNotBlank(errCode)) {
+ try {
+ errCode = URLEncoder.encode(errCode, "utf-8");
+ response.sendRedirect("https://" + host + "/#/layout?errcode="+errCode);
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ }
+ }
+
+ @ApiOperation(value = "微信第三方登录解绑", notes = "请配置此callback到网页redirect_uri")
+ @GetMapping("cleanWebOpenId")
+ public ResultData cleanWebOpenId(@ModelAttribute MallUserInfo userInfo) {
+ log.debug("[" + getIpAddr() + "] WechatLoginController::cleanWebOpenId");
+ MallUserInfo user = getUser();
+ if(userInfo == null) {
+ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
+ }
+ if(StringUtils.isBlank(userInfo.getTenantId())) {
+ userInfo.setTenantId(user.getTenantId());
+ }
+ if(userInfo.getId() == null && userInfo.getUsername() == null) {
+ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
+ }
+ // 只有本人及超级管理员可以解绑微信
+ if(userInfo.getId().equals(user.getId())
+ || user.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode())) {
+ mallUserInfoService.cleanWebOpenId(userInfo);
+ return new ResultData();
+ } else {
+ return new ResultData(ErrorCode.USER_NO_PERMISSION);
+ }
+
+ }
+}
diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java
index d05366de0..d935fdbdb 100644
--- a/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java
+++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxAppinfoController.java
@@ -75,12 +75,12 @@ public class WxAppinfoController extends BaseController {
}
- @ApiOperation("更新AccessToken, 无限制二维码生成需要更新token")
+ @ApiOperation("C端更新AccessToken, 无限制二维码生成需要更新token")
@GetMapping("/accessTokenUpdate")
- public ResultData tokenUpdate() {
- logger.debug("[" + getIpAddr() + "] WxAppinfoController::tokenUpdate");
+ public ResultData ctokenUpdate() {
+ logger.debug("[" + getIpAddr() + "] WxAppinfoController::ctokenUpdate");
try {
- wxAppinfoService.tokenUpdate(getTenantId());
+ wxAppinfoService.ctokenUpdate(getTenantId());
} catch (Exception e) {
logger.error(e.getMessage());
}
diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java
index 10cc3940f..89be25512 100644
--- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java
+++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillAllController.java
@@ -49,5 +49,13 @@ public class WxBillAllController extends BaseController
wxBillAllService.exportBill(request,response,wxBillAll);
}
+ @GetMapping("getBillInfo")
+ public ResultData getBillInfo(@ModelAttribute WxBillAll wxBillAll) {
+ wxBillAll.setTenantId(getTenantId());
+ Object billInfo = wxBillAllService.getBillInfo(wxBillAll);
+ return new ResultData(billInfo);
+ }
+
+
}
diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java
index 3a65f0a5e..42269299d 100644
--- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java
+++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillDepositController.java
@@ -76,5 +76,19 @@ public class WxBillDepositController extends BaseController {
return wxBillDepositService.updatePaid(id);
}
+ @PostMapping("returnDeposit")
+ public ResultData returnDeposit(@RequestBody WxBillDeposit wxBillDeposit) {
+ logger.debug("[" + getIpAddr() + "] WxBillDepositController::returnDeposit");
+ return wxBillDepositService.returnDeposit(wxBillDeposit);
+
+ }
+
+ @PostMapping("adjustDeposit")
+ public ResultData adjustDeposit(@RequestBody WxBillDeposit wxBillDeposit) {
+ logger.debug("[" + getIpAddr() + "] WxBillDepositController::adjustDeposit");
+ return wxBillDepositService.adjustDeposit(wxBillDeposit);
+
+ }
+
}
diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java
index 22b60fc5e..8cb3a99fe 100644
--- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java
+++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillOtherDepositController.java
@@ -76,5 +76,18 @@ public class WxBillOtherDepositController extends BaseController {
return wxBillOtherDepositService.updatePaid(id);
}
+ @PostMapping("returnDeposit")
+ public ResultData returnDeposit(@RequestBody WxBillOtherDeposit wxBillDeposit) {
+ logger.debug("[" + getIpAddr() + "] WxBillOtherDepositController::returnDeposit");
+ return wxBillOtherDepositService.returnDeposit(wxBillDeposit);
+
+ }
+
+ @PostMapping("adjustDeposit")
+ public ResultData adjustDeposit(@RequestBody WxBillOtherDeposit wxBillDeposit) {
+ logger.debug("[" + getIpAddr() + "] WxBillOtherDepositController::adjustDeposit");
+ return wxBillOtherDepositService.adjustDeposit(wxBillDeposit);
+
+ }
}
diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java
index a3fbe8d50..fc7a4f291 100644
--- a/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java
+++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxBillPropertyController.java
@@ -35,6 +35,7 @@ public class WxBillPropertyController extends BaseController {
wxBillProperty = new WxBillProperty();
}
wxBillProperty.setTenantId(getTenantId());
+ wxBillProperty.setSortColumns(WxBillProperty.Field.Id_DESC);
PageInfo