Browse Source

订单下单及c端登录/token

release_toaliyun_real
Stormeye.Wu 7 years ago
parent
commit
00d339d095
38 changed files with 1257 additions and 309 deletions
  1. +0
    -5
      mallinkCApi/pom.xml
  2. +1
    -1
      mallinkCApi/src/main/java/com/simple/CApplication.java
  3. +16
    -0
      mallinkCApi/src/main/java/com/simple/annotation/AuthIgnore.java
  4. +19
    -0
      mallinkCApi/src/main/java/com/simple/annotation/LoginUser.java
  5. +22
    -0
      mallinkCApi/src/main/java/com/simple/config/CorsConfig.java
  6. +49
    -0
      mallinkCApi/src/main/java/com/simple/config/Swagger2Config.java
  7. +47
    -0
      mallinkCApi/src/main/java/com/simple/config/WebMvcConfig.java
  8. +25
    -0
      mallinkCApi/src/main/java/com/simple/controller/BaseController.java
  9. +21
    -22
      mallinkCApi/src/main/java/com/simple/controller/WxOrderController.java
  10. +112
    -91
      mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java
  11. +69
    -0
      mallinkCApi/src/main/java/com/simple/interceptor/AuthorizationInterceptor.java
  12. +46
    -0
      mallinkCApi/src/main/java/com/simple/resolver/LoginUserHandlerMethodArgumentResolver.java
  13. +1
    -1
      mallinkCApi/src/main/resources/application.yml
  14. +10
    -1
      mallinkService/src/main/java/com/simple/common/ErrorCode.java
  15. +5
    -0
      mallinkService/src/main/java/com/simple/common/Result.java
  16. +6
    -0
      mallinkService/src/main/java/com/simple/common/ResultData.java
  17. +34
    -24
      mallinkService/src/main/java/com/simple/domain/po/WxAppinfo.java
  18. +48
    -3
      mallinkService/src/main/java/com/simple/domain/po/WxCUser.java
  19. +231
    -0
      mallinkService/src/main/java/com/simple/domain/po/WxCouponOrder.java
  20. +49
    -68
      mallinkService/src/main/java/com/simple/domain/po/WxOrder.java
  21. +39
    -0
      mallinkService/src/main/java/com/simple/enums/EnumCouponOrderStatus.java
  22. +35
    -0
      mallinkService/src/main/java/com/simple/enums/EnumPayType.java
  23. +38
    -0
      mallinkService/src/main/java/com/simple/enums/EnumValidStatus.java
  24. +1
    -1
      mallinkService/src/main/java/com/simple/mapper/WxAppinfoMapper.java
  25. +3
    -4
      mallinkService/src/main/java/com/simple/mapper/WxCUserMapper.java
  26. +17
    -0
      mallinkService/src/main/java/com/simple/mapper/WxCouponOrderMapper.java
  27. +10
    -2
      mallinkService/src/main/java/com/simple/service/WxAppinfoService.java
  28. +17
    -1
      mallinkService/src/main/java/com/simple/service/WxCUserService.java
  29. +4
    -2
      mallinkService/src/main/java/com/simple/service/WxOrderService.java
  30. +4
    -0
      mallinkService/src/main/java/com/simple/service/impl/WxAppinfoServiceImpl.java
  31. +23
    -12
      mallinkService/src/main/java/com/simple/service/impl/WxCUserServiceImpl.java
  32. +74
    -14
      mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java
  33. +4
    -4
      mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java
  34. +4
    -0
      mallinkService/src/main/java/com/simple/service/impl/WxUserCouponServiceImpl.java
  35. +26
    -14
      mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml
  36. +29
    -7
      mallinkService/src/main/resources/mapper/WxCUserMapper.xml
  37. +98
    -0
      mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml
  38. +20
    -32
      mallinkService/src/main/resources/mapper/WxOrderMapper.xml

+ 0
- 5
mallinkCApi/pom.xml View File

@@ -25,11 +25,6 @@
<artifactId>mallinkService</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>


+ 1
- 1
mallinkCApi/src/main/java/com/simple/CApplication.java View File

@@ -12,7 +12,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
*/
@SpringBootApplication
@MapperScan(basePackages = {"com.simple.mapper"})
@EnableSwagger2
public class CApplication {

public static void main(String[] args) {


+ 16
- 0
mallinkCApi/src/main/java/com/simple/annotation/AuthIgnore.java View File

@@ -0,0 +1,16 @@
package com.simple.annotation;

import java.lang.annotation.*;

/**
* api接口,忽略Token验证
* @author stormeye.wu
* @email wuguoqiang@iformall.com
* @date 2017-03-23 15:44
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AuthIgnore {

}

+ 19
- 0
mallinkCApi/src/main/java/com/simple/annotation/LoginUser.java View File

@@ -0,0 +1,19 @@
package com.simple.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* 登录用户信息
*
* @author stormeye.wu
* @email wuguoqiang@iformall.com
* @date 2017-03-23 20:39
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUser {

}

+ 22
- 0
mallinkCApi/src/main/java/com/simple/config/CorsConfig.java View File

@@ -0,0 +1,22 @@
package com.simple.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
* Created by Administrator on 2017/8/9.
*/
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {

@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}

}

+ 49
- 0
mallinkCApi/src/main/java/com/simple/config/Swagger2Config.java View File

@@ -0,0 +1,49 @@
package com.simple.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

//参考:http://blog.csdn.net/catoop/article/details/50668896
@Configuration
@EnableSwagger2
public class Swagger2Config {

@Bean
public Docket createRestApi() {
ParameterBuilder tokenPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<Parameter>();
//增加一个request的header参数
tokenPar.name("token").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
pars.add(tokenPar.build());
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.simple.controller"))
.paths(PathSelectors.any())
.build()
.globalOperationParameters(pars);
}

private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("c端 api")
.description("c api")
.termsOfServiceUrl("http://localhost:9000")
.version("2.0")
.build();
}

}

+ 47
- 0
mallinkCApi/src/main/java/com/simple/config/WebMvcConfig.java View File

@@ -0,0 +1,47 @@
package com.simple.config;

import com.simple.interceptor.AuthorizationInterceptor;
import com.simple.resolver.LoginUserHandlerMethodArgumentResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import java.util.List;

/**
* MVC配置
*
* @author stormeye.wu
* @email wugq@mippoint.com
* @date 2017-04-20 22:30
*/
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
private AuthorizationInterceptor authorizationInterceptor;
@Autowired
private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver;

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authorizationInterceptor).addPathPatterns("/api/**");
}

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(loginUserHandlerMethodArgumentResolver);
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
//registry.addResourceHandler("/app/**").addResourceLocations("classpath:/app/");

}
}

+ 25
- 0
mallinkCApi/src/main/java/com/simple/controller/BaseController.java View File

@@ -5,12 +5,23 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.simple.domain.po.WxCUser;
import com.simple.interceptor.AuthorizationInterceptor;
import com.simple.service.WxCUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

@RestController
public class BaseController {
@Autowired
private WxCUserService wxCUserService;

@InitBinder
public void InitBinder(WebDataBinder dataBinder) {
dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
@@ -32,4 +43,18 @@ public class BaseController {

});
}

public WxCUser getUser(){
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
Long cUserId = (Long)request.getAttribute(AuthorizationInterceptor.LOGIN_USER_KEY);
WxCUser user = wxCUserService.getById(cUserId);
return user;
}

public String getTenantId(){
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
Long cUserId = (Long)request.getAttribute(AuthorizationInterceptor.LOGIN_USER_KEY);
WxCUser user = wxCUserService.getById(cUserId);
return user.getTenantId();
}
}

+ 21
- 22
mallinkCApi/src/main/java/com/simple/controller/WxOrderController.java View File

@@ -1,6 +1,10 @@
package com.simple.controller;

import com.simple.common.ErrorCode;
import com.simple.domain.po.WxCUser;
import com.simple.enums.EnumOrderStatus;
import com.simple.exception.MallinkException;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
@@ -16,6 +20,8 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;

import java.util.Map;

@RestController
@RequestMapping("wxOrder")
public class WxOrderController extends BaseController {
@@ -24,31 +30,24 @@ public class WxOrderController extends BaseController {
@Autowired
private WxOrderService wxOrderService;

@ApiOperation("分页列表接口")
@GetMapping("list")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "status", value = "订单状态:-1全部;0-已下单/待付款;1-已支付;2-已取消(限定时间内未付款);3-未退款/待退款;4-已退款;5-退款失败", defaultValue = "0", required = false, dataType = "Integer")
})
public ResultData list(@ModelAttribute WxOrder wxOrder, Integer pageNum, Integer pageSize) {
if (null == wxOrder) wxOrder = new WxOrder();
final PageInfo<WxOrder> page = wxOrderService.listAsPage(wxOrder, pageNum, pageSize);
return new ResultData(page);
}

@ApiOperation("提交订单")
@ApiOperation(value = "提交订单", notes = "{\"couponId\":\"String\"}")
@PostMapping("save")
@ApiImplicitParams({
@ApiImplicitParam(name = "couponId", value = "券ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "cUserId", value = "用户ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "payment", value = "支付金额", required = true, dataType = "BigDecimal"),
@ApiImplicitParam(name = "status", value = "订单状态:-1全部;0-已下单/待付款;1-已支付;2-已取消(限定时间内未付款);3-未退款/待退款;4-已退款;5-退款失败", defaultValue = "0", required = false, dataType = "Integer")
})
public ResultData saveOrder(@RequestBody WxOrder wxOrder) {
public ResultData saveOrder(@RequestBody Map<String, String> paramMap) {
//Assert.notNull(wxOrders.getName(), "角色名不能为空");
//Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名");
wxOrderService.saveOrder(wxOrder);
String couponIdStr = paramMap.get("couponId");
if (StringUtils.isBlank(couponIdStr)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "couponId不能为空");
}
Long couponId = Long.valueOf(couponIdStr);
WxCUser user = getUser();

try {
WxOrder order = wxOrderService.saveOrder(user, couponId);
return new ResultData(order);
}catch (MallinkException e) {
logger.error(e.getMessage());
}
return new ResultData();
}



+ 112
- 91
mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java View File

@@ -1,14 +1,23 @@
package com.simple.controller;

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig;
import com.alibaba.druid.wall.WallConfig;
import com.simple.annotation.AuthIgnore;
import com.simple.common.ErrorCode;
import com.simple.common.IdWorker;
import com.simple.common.ResultData;
import com.simple.domain.po.WxAppinfo;
import com.simple.domain.po.WxCUser;
import com.simple.service.WxAppinfoService;
import com.simple.service.WxCUserService;
import com.simple.utils.IPUtil;
import io.swagger.annotations.ApiOperation;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,28 +30,52 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/api/user")
public class WxUserGrantController {
public class WxUserGrantController extends BaseController {
private final static Logger logger = LoggerFactory.getLogger(WxUserGrantController.class);

@Autowired
private WxMaService wxService;

private WxAppinfoService wxAppinfoService;
@Autowired
private WxCUserService wxCUserService;

private WxMaService createFromId(String appId) {

WxAppinfo appinfo = wxAppinfoService.getByAppId(appId);

WxMaInMemoryConfig config = new WxMaInMemoryConfig();
config.setAppid(appinfo.getAppId());
config.setSecret(appinfo.getSecret());
config.setToken(appinfo.getToken());
config.setAesKey(appinfo.getAesKey());
config.setMsgDataFormat(appinfo.getMsgDataFormat());

WxMaService service = new WxMaServiceImpl();
service.setWxMaConfig(config);
return service;
}

/**
* 用户登录
* @param map
* @return
*/
@AuthIgnore
@PostMapping("/login")
@ApiOperation(value="用户登录", notes="{\"code\":\"string\",\"scene\":\"string\",\"sceneAddress\":\"string\"}")
@ApiOperation(value="用户登录", notes="{\"appId\":\"string\",\"code\":\"string\",\"scene\":\"string\",\"sceneAddress\":\"string\"}")
public ResultData userLogin(@RequestBody Map<String, String> map) {
logger.debug(map.toString());

Map resultMap = new HashMap();

String appId = map.get("appId");
WxMaService wxMaService = createFromId(appId);

String code = map.get("code");
String scene = map.get("scene");
String sceneAddress = map.get("sceneAddress");
@@ -51,50 +84,59 @@ public class WxUserGrantController {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "code不能为空");
}

String token = null;
String session_key = null;
String openId = null;
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
String ipaddress = IPUtil.getIpAddr(request);

try {
WxMaJscode2SessionResult session = wxService.jsCode2SessionInfo(code);
WxMaJscode2SessionResult session = wxMaService.jsCode2SessionInfo(code);
//获取会话密钥(session_key)
session_key = session.getSessionKey();
openId = session.getOpenid();
logger.info("session_key: " + session_key);
logger.info("openId: " + openId);
resultMap.put("openId", openId);
} catch (WxErrorException e) {
logger.error(e.getMessage(), e);
return new ResultData();
return new ResultData(ErrorCode.SESSION_KEY_DECODE_ERR, resultMap);
}
/*
WxCUser user = new WxCUser();
user.setAppId(appId);
user.setOpenId(openId);

try {
WxUserEntity user1 = wxCUserService.getById();
WxCUser user1 = wxCUserService.getByOpenId(user);
if (user1 != null) {
user1.createToken(new Date());
token = user1.getToken();
user1.setRegisterIp(ipaddress);
user1.setSessionKey(session_key);
wxUserService.update(user1);
if (user1.getScene() == null)
user1.setScene(scene);
if (user1.getSceneAddress() == null)
user1.setSceneAddress(sceneAddress);
wxCUserService.saveOrUpdate(user1);
resultMap.put("token", token);
} else {
WxUserEntity user = new WxUserEntity();
user.setRegisterip(ipaddress);
user.createToken(new Date());
token = user.getToken();
user.setRegisterIp(ipaddress);
if (user.getScene() == null)
user.setScene(scene);
if (user.getSceneAddress() == null)
user.setSceneAddress(sceneAddress);
if (scene != null) {
user.setQrcodesource(scene);
} else {
user.setQrcodesource(sceneAddress);
}
user.setOpenid(openId);

user.setSessionKey(session_key);
wxUserService.save(user);
wxCUserService.saveOrUpdate(user);
resultMap.put("token", token);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
return R.error(e.toString());
logger.error(e.getMessage());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "wx_c_user数据库保存出错", resultMap);
}
*/
return new ResultData();
return new ResultData(resultMap);
}

/**
@@ -103,64 +145,56 @@ public class WxUserGrantController {
* @return
*/
@PostMapping("/getUserInfo")
@ApiOperation(value="授权后获取用户的昵称,unionId等信息", notes="{\"encryptedData\":\"string\",\"iv\":\"string\",\"openId\":\"string\"}")
@ApiOperation(value="授权后获取用户的昵称,unionId等信息", notes="{\"encryptedData\":\"string\",\"iv\":\"string\"}")
public ResultData getUserInfo(@RequestBody Map<String, String> map) {
logger.debug(map.toString());
String openId = map.get("openId");
Map resultMap = new HashMap();

String encryptedData = map.get("encryptedData");
String iv = map.get("iv");


if (StringUtils.isBlank(encryptedData)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "encryptedData不能为空");
}
if (StringUtils.isBlank(iv)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "iv不能为空");
}
if (StringUtils.isBlank(openId)) {
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "openId不能为空");
}

WxCUser user = null;
/*
try {
//user = wxCUserService.queryObjectByOpenId(openId);
} catch (Exception e) {
logger.error(e.getMessage(), e);
return R.error(e.toString());
}
WxCUser user = getUser();

if (user != null) {
WxMaService wxMaService = createFromId(user.getAppId());

logger.debug(user.toString());
String session_key = user.getSessionKey();
try {
// 解密用户信息
WxMaUserInfo userInfo = this.wxService.getUserService().getUserInfo(session_key, encryptedData, iv);
WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(session_key, encryptedData, iv);
if (userInfo != null) {
logger.debug(userInfo.toString());
user.setUnionid(userInfo.getUnionId());
user.setNickname(userInfo.getNickName());
user.setUnionId(userInfo.getUnionId());
user.setNickName(userInfo.getNickName());
user.setGender(Integer.parseInt(userInfo.getGender()));
user.setAvatarurl(userInfo.getAvatarUrl());
user.setAvatarUrl(userInfo.getAvatarUrl());
user.setProvince(userInfo.getProvince());
user.setCity(userInfo.getCity());
user.setLanguage(userInfo.getLanguage());
wxUserService.update(user);
r.put("openId", user.getOpenid());
r.put("unionId", user.getUnionid());
r.put("msg", "获取用户信息成功!");
return r;
wxCUserService.saveOrUpdate(user);

resultMap.put("openId", user.getOpenId());
resultMap.put("unionId", user.getUnionId());
resultMap.put("msg", "获取用户信息成功!");
return new ResultData(resultMap);
} else {
return R.code(22, "解密失败");
return new ResultData(ErrorCode.NICK_NAME_DECODE_ERR, resultMap);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
return R.error(e.toString());
return new ResultData(ErrorCode.DB_FAIL.getCode(), "解密并保存出错", resultMap);
}
} else {
return R.code(20, "用户信息未找到");
return new ResultData(ErrorCode.USER_IS_EMPTY);
}
*/
return new ResultData();
}

/**
@@ -168,63 +202,50 @@ public class WxUserGrantController {
* @param map
* @return
*/
/*
@PostMapping("/getUserPhone")
@ApiOperation(value = "授权后获取用户的手机号", notes="{\"encryptedData\":\"string\",\"iv\":\"\",\"openId\":\"\"}")
public new ResultData getUserPhone(@RequestBody Map<String, String> map) {
@ApiOperation(value = "授权后获取用户的手机号", notes="{\"encryptedData\":\"string\",\"iv\":\"string\"}")
public ResultData getUserPhone(@RequestBody Map<String, String> map) {
logger.debug(map.toString());
R r = new R();
Map resultMap = new HashMap();
String encryptedData = map.get("encryptedData");
String iv = map.get("iv");
String openId = map.get("openId");

//登录凭证不能为空
if (StringUtils.isBlank(encryptedData)) {
return R.code(1, "encryptedData 不能为空");
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "encryptedData 不能为空");
}
if (StringUtils.isBlank(iv)) {
return R.code(2, "iv 不能为空");
}
if (StringUtils.isBlank(openId)) {
return R.code(3, "openId 不能为空");
return new ResultData(ErrorCode.PARAMETER_NOT_NULL.getCode(), "iv 不能为空");
}

WxUserEntity user = null;
WxCUser user = getUser();

WxMaService wxMaService = createFromId(user.getAppId());

String session_key = user.getSessionKey();
try {
user = wxUserService.queryObjectByOpenId(openId);
// 解密
WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(session_key, encryptedData, iv);
if (null != phoneNoInfo) {
logger.debug(phoneNoInfo.toString());
user.setPhone(phoneNoInfo.getPhoneNumber());
user.setPurePhone(phoneNoInfo.getPurePhoneNumber());
user.setCountryCode(phoneNoInfo.getCountryCode());
wxCUserService.saveOrUpdate(user);
resultMap.put("msg","授权手机成功!");
resultMap.put("phone",phoneNoInfo.getPhoneNumber());
return new ResultData(resultMap);
} else {
return new ResultData(ErrorCode.PHONE_DECODE_ERR, resultMap);
}
} catch (Exception e) {
this.logger.error(e.getMessage(), e);
return R.error(e.toString());
}

if (user != null) {
logger.debug(user.toString());
String session_key = user.getSessionKey();
try {
// 解密
WxMaPhoneNumberInfo phoneNoInfo = this.wxService.getUserService().getPhoneNoInfo(session_key, encryptedData, iv);
if (null != phoneNoInfo) {
logger.debug(phoneNoInfo.toString());
user.setPhone(phoneNoInfo.getPhoneNumber());
user.setPurephone(phoneNoInfo.getPurePhoneNumber());
user.setCountrycode(phoneNoInfo.getCountryCode());
wxUserService.update(user);
r.put("msg","授权手机成功!");
r.put("phone",phoneNoInfo.getPhoneNumber());
return r;
} else {
return R.code(22, "解密失败");
}
} catch (Exception e) {
this.logger.error(e.getMessage(), e);
return R.error(e.toString());
}
} else {
return R.code(20, "用户信息未找到");
return new ResultData(ErrorCode.DB_FAIL.getCode(), "解密并保存出错", resultMap);
}
}
*/


/**
* 判断是否是老用户
* @param map


+ 69
- 0
mallinkCApi/src/main/java/com/simple/interceptor/AuthorizationInterceptor.java View File

@@ -0,0 +1,69 @@
package com.simple.interceptor;


import com.simple.annotation.AuthIgnore;
import com.simple.common.ErrorCode;
import com.simple.domain.po.WxCUser;
import com.simple.exception.MallinkException;
import com.simple.service.WxCUserService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* 权限(Token)验证
* @author stormeye.wu
* @email wuguoqiang@iformall.com
* @date 2017-03-23 15:38
*/
@Component
public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
@Autowired
private WxCUserService wxCUserService;

public static final String LOGIN_USER_KEY = "LOGIN_USER_KEY";

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
AuthIgnore annotation;
if(handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(AuthIgnore.class);
}else{
return true;
}

//如果有@IgnoreAuth注解,则不验证token
if(annotation != null){
return true;
}

//从header中获取token
String token = request.getHeader("token");
//如果header中不存在token,则从参数中获取token
if(StringUtils.isBlank(token)){
token = request.getParameter("token");
}

//token为空
if(StringUtils.isBlank(token)){
throw new MallinkException(ErrorCode.TOKEN_EMPTY);
}

// 查询token信息
WxCUser wxCUser = wxCUserService.getByToken(token);
if(wxCUser == null || wxCUser.getExpireTime().getTime() < System.currentTimeMillis()){
throw new MallinkException(ErrorCode.TOKEN_INVALID.getCode(), "URL:" + request.getRequestURL() + " token失效,请重新登录");
}

//设置userId到request里,后续根据userId,获取用户信息
request.setAttribute(LOGIN_USER_KEY, wxCUser.getId());

return true;
}
}

+ 46
- 0
mallinkCApi/src/main/java/com/simple/resolver/LoginUserHandlerMethodArgumentResolver.java View File

@@ -0,0 +1,46 @@
package com.simple.resolver;

import com.simple.annotation.LoginUser;
import com.simple.domain.po.WxCUser;
import com.simple.interceptor.AuthorizationInterceptor;
import com.simple.service.WxCUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

/**
* 有@LoginUser注解的方法参数,注入当前登录用户
* @author stormeye.wu
* @email wugq@mippoint.com
* @date 2017-03-23 22:02
*/
@Component
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Autowired
private WxCUserService wxCUserService;

@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().isAssignableFrom(WxCUser.class) && parameter.hasParameterAnnotation(LoginUser.class);
}

@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
//获取用户ID
Object object = request.getAttribute(AuthorizationInterceptor.LOGIN_USER_KEY, RequestAttributes.SCOPE_REQUEST);
if(object == null){
return null;
}

//获取用户信息
WxCUser user = wxCUserService.getByToken((String)object);

return user;
}
}

+ 1
- 1
mallinkCApi/src/main/resources/application.yml View File

@@ -1,5 +1,5 @@
server:
port: 8000
port: 8001
context-path: /C

spring:


+ 10
- 1
mallinkService/src/main/java/com/simple/common/ErrorCode.java View File

@@ -29,6 +29,9 @@ public enum ErrorCode{

LOGIN_DENIED(1014, "登录失败"),
TOKEN_INVALID(1015, "TOKEN无效"),
TOKEN_EMPTY(1016, "token不能为空"),

DB_FAIL(1045, "数据库访问出错"),

TOO_MANY_REQUEST(1050, "太多的请求访问"),

@@ -43,6 +46,10 @@ public enum ErrorCode{
PASSWORD_ERROR(2001, "密码错误"),
LOGIN_USER_OR_PWD_ERROR(2002, "用户名或密码错误"),
USER_IS_LOCKED(2003, "用户已经被锁定不能登录,请与管理员联系"),
NEW_USER_FAILD(2004, "创建新用户失败"),


COUPON_IS_EMPTY(2020, "券不存在"),

/**
* 车流 2050
@@ -72,7 +79,9 @@ public enum ErrorCode{
/**
* 微信
*/

SESSION_KEY_DECODE_ERR(11001, "session_key/openId解密失败"),
NICK_NAME_DECODE_ERR(11002, "nickName,unionId解密失败"),
PHONE_DECODE_ERR(11002, "Phoned解密失败"),


/**


+ 5
- 0
mallinkService/src/main/java/com/simple/common/Result.java View File

@@ -24,4 +24,9 @@ public class Result {
this.message = message;
}

public Result(ErrorCode errorCode) {
this.code = errorCode.getCode();
this.message = errorCode.getMessage();
}

}

+ 6
- 0
mallinkService/src/main/java/com/simple/common/ResultData.java View File

@@ -76,6 +76,12 @@ public class ResultData extends Result {
this.data = data;
}

public ResultData(ErrorCode errorCode, Object data) {
this.code = errorCode.getCode();
this.message = errorCode.getMessage();
this.data = data;
}

public HashMap<String, Object> toHashMap() {
HashMap<String, Object> map = new HashMap<>(3);
map.put("code", this.code);


+ 34
- 24
mallinkService/src/main/java/com/simple/domain/po/WxAppinfo.java View File

@@ -45,20 +45,23 @@ public class WxAppinfo implements Serializable {
@io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId")
private String tenantId;
/*小程序ID**/
@io.swagger.annotations.ApiModelProperty(value="小程序ID",name="appid")
private String appid;
/*小程序secret**/
@io.swagger.annotations.ApiModelProperty(value="小程序secret",name="secret")
private String secret;
@io.swagger.annotations.ApiModelProperty(value="小程序ID",name="appId")
private String appId;
/*小程序名**/
@io.swagger.annotations.ApiModelProperty(value="小程序名",name="name")
private String name;
/*小程序secret**/
@io.swagger.annotations.ApiModelProperty(value="小程序secret",name="secret")
private String secret;
/*消息token**/
@io.swagger.annotations.ApiModelProperty(value="消息token",name="token")
private String token;
/*消息aeskey**/
@io.swagger.annotations.ApiModelProperty(value="消息aeskey",name="aeskey")
private String aeskey;
@io.swagger.annotations.ApiModelProperty(value="消息aeskey",name="aesKey")
private String aesKey;
/*消息类型**/
@io.swagger.annotations.ApiModelProperty(value="消息类型",name="msgDataFormat")
private String msgDataFormat;
/*微信访问token**/
@io.swagger.annotations.ApiModelProperty(value="微信访问token",name="accessToken")
private String accessToken;
@@ -74,17 +77,11 @@ public class WxAppinfo implements Serializable {
public void setTenantId(String _tenantId) {
tenantId = _tenantId;
}
public String getAppid() {
return appid;
public String getAppId() {
return appId;
}
public void setAppid(String _appid) {
appid = _appid;
}
public String getSecret() {
return secret;
}
public void setSecret(String _secret) {
secret = _secret;
public void setAppId(String _appId) {
appId = _appId;
}
public String getName() {
return name;
@@ -92,17 +89,29 @@ public class WxAppinfo implements Serializable {
public void setName(String _name) {
name = _name;
}
public String getSecret() {
return secret;
}
public void setSecret(String _secret) {
secret = _secret;
}
public String getToken() {
return token;
}
public void setToken(String _token) {
token = _token;
}
public String getAeskey() {
return aeskey;
public String getAesKey() {
return aesKey;
}
public void setAesKey(String _aesKey) {
aesKey = _aesKey;
}
public String getMsgDataFormat() {
return msgDataFormat;
}
public void setAeskey(String _aeskey) {
aeskey = _aeskey;
public void setMsgDataFormat(String _msgDataFormat) {
msgDataFormat = _msgDataFormat;
}
public String getAccessToken() {
return accessToken;
@@ -129,11 +138,12 @@ public class WxAppinfo implements Serializable {
{
Id_ASC("`id` ASC"),Id_DESC("`id` DESC")
,TenantId_ASC("`tenantId` ASC"),TenantId_DESC("`tenantId` DESC")
,Appid_ASC("`appid` ASC"),Appid_DESC("`appid` DESC")
,Secret_ASC("`secret` ASC"),Secret_DESC("`secret` DESC")
,AppId_ASC("`appId` ASC"),AppId_DESC("`appId` DESC")
,Name_ASC("`name` ASC"),Name_DESC("`name` DESC")
,Secret_ASC("`secret` ASC"),Secret_DESC("`secret` DESC")
,Token_ASC("`token` ASC"),Token_DESC("`token` DESC")
,Aeskey_ASC("`aeskey` ASC"),Aeskey_DESC("`aeskey` DESC")
,AesKey_ASC("`aesKey` ASC"),AesKey_DESC("`aesKey` DESC")
,MsgDataFormat_ASC("`msgDataFormat` ASC"),MsgDataFormat_DESC("`msgDataFormat` DESC")
,AccessToken_ASC("`accessToken` ASC"),AccessToken_DESC("`accessToken` DESC")
,LastTokenTime_ASC("`lastTokenTime` ASC"),LastTokenTime_DESC("`lastTokenTime` DESC")
,ExpiresIn_ASC("`expiresIn` ASC"),ExpiresIn_DESC("`expiresIn` DESC")


+ 48
- 3
mallinkService/src/main/java/com/simple/domain/po/WxCUser.java View File

@@ -11,12 +11,14 @@ import java.io.Serializable;
@Table(name = "wx_c_user")
public class WxCUser implements Serializable {
private static final long serialVersionUID = 1L;
//12小时后过期
private final static int EXPIRE = 3600 * 12;
@Id
protected Long id;
@Transient
protected List<String> ids;
protected List<Long> ids;
@Transient
protected String sortColumns;
@@ -32,10 +34,11 @@ public class WxCUser implements Serializable {
return sortColumns;
}
public List<String> getIds() {
public List<Long> getIds() {
return ids;
}
public void setIds(List<String> ids) {

public void setIds(List<Long> ids) {
this.ids = ids;
}
@@ -104,6 +107,15 @@ public class WxCUser implements Serializable {
/*创建时间**/
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate")
private Date createDate;
/*小程序的appId**/
@io.swagger.annotations.ApiModelProperty(value="小程序的appId",name="appId")
private String appId;
/*用户登录用token**/
@io.swagger.annotations.ApiModelProperty(value="用户登录用token",name="token")
private String token;
/*用户过期时间**/
@io.swagger.annotations.ApiModelProperty(value="用户过期时间",name="expireTime")
private Date expireTime;
public String getTenantId() {
return tenantId;
}
@@ -230,6 +242,24 @@ public class WxCUser implements Serializable {
public void setCreateDate(Date _createDate) {
createDate = _createDate;
}
public String getAppId() {
return appId;
}
public void setAppId(String _appId) {
appId = _appId;
}
public String getToken() {
return token;
}
public void setToken(String _token) {
token = _token;
}
public Date getExpireTime() {
return expireTime;
}
public void setExpireTime(Date _expireTime) {
expireTime = _expireTime;
}



@@ -257,6 +287,9 @@ public class WxCUser implements Serializable {
,Score_ASC("`score` ASC"),Score_DESC("`score` DESC")
,UpdateDate_ASC("`updateDate` ASC"),UpdateDate_DESC("`updateDate` DESC")
,CreateDate_ASC("`createDate` ASC"),CreateDate_DESC("`createDate` DESC")
,AppId_ASC("`appId` ASC"),AppId_DESC("`appId` DESC")
,Token_ASC("`token` ASC"),Token_DESC("`token` DESC")
,ExpireTime_ASC("`expireTime` ASC"),ExpireTime_DESC("`expireTime` DESC")
;
private String value;
Field(String value){
@@ -308,4 +341,16 @@ public class WxCUser implements Serializable {
this.setSortColumns(Field.valueOf(sortColumns));
}
}

public void createToken(Date currentDate) {
if (expireTime == null || expireTime.getTime() < currentDate.getTime())
{
//生成一个token
String token = UUID.randomUUID().toString();
//过期时间
Date expireTime = new Date(currentDate.getTime() + EXPIRE * 1000);
setToken(token);
setExpireTime(expireTime);
}
}
}

+ 231
- 0
mallinkService/src/main/java/com/simple/domain/po/WxCouponOrder.java View File

@@ -0,0 +1,231 @@
package com.simple.domain.po;

import javax.persistence.*;
import java.util.*;
import java.math.*;
import javax.persistence.Transient;
import java.util.List;
import javax.persistence.Id;
import java.io.Serializable;

@Table(name = "wx_coupon_order")
public class WxCouponOrder implements Serializable {
private static final long serialVersionUID = 1L;

@Id
protected Long id;

@Transient
protected List<Long> ids;
@Transient
protected String sortColumns;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getSortColumns() {
return sortColumns;
}

public List<Long> getIds() {
return ids;
}

public void setIds(List<Long> ids) {
this.ids = ids;
}

/***/
@io.swagger.annotations.ApiModelProperty(value = "", name = "tenantId")
private Long tenantId;
/*单张券ID**/
@io.swagger.annotations.ApiModelProperty(value = "单张券ID", name = "couponId")
private Long couponId;
/*c端用户id**/
@io.swagger.annotations.ApiModelProperty(value = "c端用户id", name = "cUserId")
private Long cUserId;
/*操作券B端小程序用户ID**/
@io.swagger.annotations.ApiModelProperty(value = "操作券B端小程序用户ID", name = "bUserId")
private Long bUserId;
/*用户订单ID**/
@io.swagger.annotations.ApiModelProperty(value = "用户订单ID", name = "orderId")
private Long orderId;
/*该订单对应券的实际过期时间**/
@io.swagger.annotations.ApiModelProperty(value = "该订单对应券的实际过期时间", name = "expiredTime")
private Date expiredTime;
/*状态:0,待使用 1,已核销 2,已过期 3,已作废 **/
@io.swagger.annotations.ApiModelProperty(value = "状态:0,待使用 1,已核销 2,已过期 3,已作废 ", name = "couponOrderStatus")
private Integer couponOrderStatus;
/***/
@io.swagger.annotations.ApiModelProperty(value = "", name = "createDate")
private Date createDate;
/***/
@io.swagger.annotations.ApiModelProperty(value = "", name = "updateDate")
private Date updateDate;
/*单券实际购买价格**/
@io.swagger.annotations.ApiModelProperty(value = "单券实际购买价格", name = "couponPrice")
private BigDecimal couponPrice;

public Long getTenantId() {
return tenantId;
}

public void setTenantId(Long _tenantId) {
tenantId = _tenantId;
}

public Long getCouponId() {
return couponId;
}

public void setCouponId(Long _couponId) {
couponId = _couponId;
}

public Long getCUserId() {
return cUserId;
}

public void setCUserId(Long _cUserId) {
cUserId = _cUserId;
}

public Long getBUserId() {
return bUserId;
}

public void setBUserId(Long _bUserId) {
bUserId = _bUserId;
}

public Long getOrderId() {
return orderId;
}

public void setOrderId(Long _orderId) {
orderId = _orderId;
}

public Date getExpiredTime() {
return expiredTime;
}

public void setExpiredTime(Date _expiredTime) {
expiredTime = _expiredTime;
}

public Integer getCouponOrderStatus() {
return couponOrderStatus;
}

public void setCouponOrderStatus(Integer _couponOrderStatus) {
couponOrderStatus = _couponOrderStatus;
}

public Date getCreateDate() {
return createDate;
}

public void setCreateDate(Date _createDate) {
createDate = _createDate;
}

public Date getUpdateDate() {
return updateDate;
}

public void setUpdateDate(Date _updateDate) {
updateDate = _updateDate;
}

public BigDecimal getCouponPrice() {
return couponPrice;
}

public void setCouponPrice(BigDecimal _couponPrice) {
couponPrice = _couponPrice;
}


public static enum Field {
CouponOrderId_ASC("`couponOrderId` ASC"),
CouponOrderId_DESC("`couponOrderId` DESC"),
TenantId_ASC("`tenantId` ASC"),
TenantId_DESC("`tenantId` DESC"),
CouponId_ASC("`couponId` ASC"),
CouponId_DESC("`couponId` DESC"),
CUserId_ASC("`cUserId` ASC"),
CUserId_DESC("`cUserId` DESC"),
BUserId_ASC("`bUserId` ASC"),
BUserId_DESC("`bUserId` DESC"),
OrderId_ASC("`orderId` ASC"),
OrderId_DESC("`orderId` DESC"),
ExpiredTime_ASC("`expiredTime` ASC"),
ExpiredTime_DESC("`expiredTime` DESC"),
CouponOrderStatus_ASC("`couponOrderStatus` ASC"),
CouponOrderStatus_DESC("`couponOrderStatus` DESC"),
CreateDate_ASC("`createDate` ASC"),
CreateDate_DESC("`createDate` DESC"),
UpdateDate_ASC("`updateDate` ASC"),
UpdateDate_DESC("`updateDate` DESC"),
CouponPrice_ASC("`couponPrice` ASC"),
CouponPrice_DESC("`couponPrice` DESC");

private String value;

Field(String value) {
this.value = value;
}

public String getValue() {
return value;
}

public void setCol(String value) {
this.value = value;
}

@Override
public String toString() {
return this.getValue();
}
}

public void setSortColumns(WxCouponOrder.Field... fields) {
if (fields == null || fields.length == 0) {
return;
}
for (int k = 0; k < fields.length; k++) {
if (fields[k] == null) {
return;
}
}
StringBuilder sb = new StringBuilder(fields[0].toString());
for (int k = 1; k < fields.length; k++) {
sb.append(",");
sb.append(fields[k].toString());
}

}

public void setSortColumns(String sortColumns) {
if (sortColumns == null || "".equals(sortColumns.trim())) {
return;
}
if (sortColumns.contains(",")) {
String[] cols = sortColumns.split(",");
java.util.List<Field> fList = new java.util.ArrayList();
for (int k = 0; k < cols.length; k++) {
fList.add(Field.valueOf(cols[k]));
}
this.setSortColumns(fList.toArray(new Field[fList.size()]));
} else {
this.setSortColumns(Field.valueOf(sortColumns));
}
}
}

+ 49
- 68
mallinkService/src/main/java/com/simple/domain/po/WxOrder.java View File

@@ -16,7 +16,7 @@ public class WxOrder implements Serializable {
protected Long id;
@Transient
protected List<String> ids;
protected List<Long> ids;
@Transient
protected String sortColumns;
@@ -32,73 +32,80 @@ public class WxOrder implements Serializable {
return sortColumns;
}
public List<String> getIds() {
public List<Long> getIds() {
return ids;
}
public void setIds(List<String> ids) {

public void setIds(List<Long> ids) {
this.ids = ids;
}
/*订单码;正反向交易保持一致。**/
@io.swagger.annotations.ApiModelProperty(value="订单码;正反向交易保持一致。",name="orderNumber")
private Long orderNumber;
/*租户ID**/
@io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId")
private String tenantId;
/*卡券ID**/
@io.swagger.annotations.ApiModelProperty(value="卡券ID",name="couponId")
private Long couponId;
/*c端用户id**/
@io.swagger.annotations.ApiModelProperty(value="c端用户id",name="cUserId")
private Long cUserId;
/*支付金额**/
@io.swagger.annotations.ApiModelProperty(value="支付金额",name="payment")
private BigDecimal payment;
/*操作券B端小程序用户ID**/
@io.swagger.annotations.ApiModelProperty(value="操作券B端小程序用户ID",name="bUserId")
private Long bUserId;
/*0: 付款 1: 退款**/
@io.swagger.annotations.ApiModelProperty(value="0: 付款 1: 退款",name="paymentType")
private Integer paymentType;
/*支付金额(分):允许有负数,退款时为负值。**/
@io.swagger.annotations.ApiModelProperty(value="支付金额(分):允许有负数,退款时为负值。",name="payment")
private Integer payment;
/*支付时间**/
@io.swagger.annotations.ApiModelProperty(value="支付时间",name="paymentTime")
private Date paymentTime;
/*订单状态:-1全部;0-已下单/待付款;1-已支付;2-已取消(限定时间内未付款);3-未退款/待退款;4-已退款;5-退款失败**/
@io.swagger.annotations.ApiModelProperty(value="订单状态:-1全部;0-已下单/待付款;1-已支付;2-已取消(限定时间内未付款);3-未退款/待退款;4-已退款;5-退款失败",name="status")
private Integer status;
/*券状态(3:已领取/已购买/未核销/未使用,4:已核销/已使用,5:已过期,6:已退券 )**/
@io.swagger.annotations.ApiModelProperty(value="券状态(3:已领取/已购买/未核销/未使用,4:已核销/已使用,5:已过期,6:已退券 )",name="couponStatus")
private Integer couponStatus;
/*卡券过期时间**/
@io.swagger.annotations.ApiModelProperty(value="卡券过期时间",name="validDate")
private Date validDate;
/*有无退款(0: 无, 1:有)**/
@io.swagger.annotations.ApiModelProperty(value="有无退款(0: 无, 1:有)",name="refund")
private Integer refund;
/*退款时间**/
@io.swagger.annotations.ApiModelProperty(value="退款时间",name="refundTime")
private Date refundTime;
/*订单状态:-1全部;正向交易:0-已下单/待付款;1-已支付;2-已取消(限定时间内未付款)反向交易:3-已退款;4-退款失败**/
@io.swagger.annotations.ApiModelProperty(value="订单状态:-1全部;正向交易:0-已下单/待付款;1-已支付;2-已取消(限定时间内未付款)反向交易:3-已退款;4-退款失败",name="orderStatus")
private Integer orderStatus;
/*创建时间**/
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate")
private Date createDate;
/*更新时间**/
@io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate")
private Date updateDate;
public Long getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(Long _orderNumber) {
orderNumber = _orderNumber;
}
public String getTenantId() {
return tenantId;
}
public void setTenantId(String _tenantId) {
tenantId = _tenantId;
}
public Long getCouponId() {
return couponId;
}
public void setCouponId(Long _couponId) {
couponId = _couponId;
}
public Long getCUserId() {
return cUserId;
}
public void setCUserId(Long _cUserId) {
cUserId = _cUserId;
}
public BigDecimal getPayment() {
public Long getBUserId() {
return bUserId;
}
public void setBUserId(Long _bUserId) {
bUserId = _bUserId;
}
public Integer getPaymentType() {
return paymentType;
}
public void setPaymentType(Integer _paymentType) {
paymentType = _paymentType;
}
public Integer getPayment() {
return payment;
}
public void setPayment(BigDecimal _payment) {
public void setPayment(Integer _payment) {
payment = _payment;
}
public Date getPaymentTime() {
@@ -107,35 +114,11 @@ public class WxOrder implements Serializable {
public void setPaymentTime(Date _paymentTime) {
paymentTime = _paymentTime;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer _status) {
status = _status;
}
public Integer getCouponStatus() {
return couponStatus;
}
public void setCouponStatus(Integer _couponStatus) {
couponStatus = _couponStatus;
}
public Date getValidDate() {
return validDate;
}
public void setValidDate(Date _validDate) {
validDate = _validDate;
}
public Integer getRefund() {
return refund;
}
public void setRefund(Integer _refund) {
refund = _refund;
}
public Date getRefundTime() {
return refundTime;
public Integer getOrderStatus() {
return orderStatus;
}
public void setRefundTime(Date _refundTime) {
refundTime = _refundTime;
public void setOrderStatus(Integer _orderStatus) {
orderStatus = _orderStatus;
}
public Date getCreateDate() {
return createDate;
@@ -155,16 +138,14 @@ public class WxOrder implements Serializable {
public static enum Field
{
Id_ASC("`id` ASC"),Id_DESC("`id` DESC")
,OrderNumber_ASC("`orderNumber` ASC"),OrderNumber_DESC("`orderNumber` DESC")
,TenantId_ASC("`tenantId` ASC"),TenantId_DESC("`tenantId` DESC")
,CouponId_ASC("`couponId` ASC"),CouponId_DESC("`couponId` DESC")
,CUserId_ASC("`cUserId` ASC"),CUserId_DESC("`cUserId` DESC")
,BUserId_ASC("`bUserId` ASC"),BUserId_DESC("`bUserId` DESC")
,PaymentType_ASC("`paymentType` ASC"),PaymentType_DESC("`paymentType` DESC")
,Payment_ASC("`payment` ASC"),Payment_DESC("`payment` DESC")
,PaymentTime_ASC("`paymentTime` ASC"),PaymentTime_DESC("`paymentTime` DESC")
,Status_ASC("`status` ASC"),Status_DESC("`status` DESC")
,CouponStatus_ASC("`couponStatus` ASC"),CouponStatus_DESC("`couponStatus` DESC")
,ValidDate_ASC("`validDate` ASC"),ValidDate_DESC("`validDate` DESC")
,Refund_ASC("`refund` ASC"),Refund_DESC("`refund` DESC")
,RefundTime_ASC("`refundTime` ASC"),RefundTime_DESC("`refundTime` DESC")
,OrderStatus_ASC("`orderStatus` ASC"),OrderStatus_DESC("`orderStatus` DESC")
,CreateDate_ASC("`createDate` ASC"),CreateDate_DESC("`createDate` DESC")
,UpdateDate_ASC("`updateDate` ASC"),UpdateDate_DESC("`updateDate` DESC")
;
@@ -184,7 +165,7 @@ public class WxOrder implements Serializable {
}
}
public void setSortColumns(Field... fields)
public void setSortColumns(WxOrder.Field... fields)
{
if (fields == null || fields.length == 0) {
return;
@@ -209,7 +190,7 @@ public class WxOrder implements Serializable {
}
if (sortColumns.contains(",")) {
String[] cols = sortColumns.split(",");
List<Field> fList = new ArrayList();
java.util.List<Field> fList = new java.util.ArrayList();
for (int k = 0; k < cols.length; k++) {
fList.add(Field.valueOf(cols[k]));
}


+ 39
- 0
mallinkService/src/main/java/com/simple/enums/EnumCouponOrderStatus.java View File

@@ -0,0 +1,39 @@
package com.simple.enums;

/**
* Created by Stormeye on 2018/08/09.
*/
public enum EnumCouponOrderStatus {
// 0-已领取/已购买/未核销/未使用/待使用,1:已核销/已使用,3:已过期,6:已作废

COUPON_ORDER_USE_WAIT(0, "待使用"),
COUPON_ORDER_USED(1, "已核销"),
COUPON_ORDER_OVER_TIME(2, "已过期"),
COUPON_ORDER_INVALID(3, "已作废")
;

public static EnumCouponOrderStatus getEnum(Integer code) {
for (EnumCouponOrderStatus value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumCouponOrderStatus(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 35
- 0
mallinkService/src/main/java/com/simple/enums/EnumPayType.java View File

@@ -0,0 +1,35 @@
package com.simple.enums;

/**
* Created by Stormeye on 2018/08/09.
*/
public enum EnumPayType {

PAY_PAYMENT(0, "付款"),
PAY_REFUND(1, "退款");

public static EnumPayType getEnum(Integer code) {
for (EnumPayType value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumPayType(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 38
- 0
mallinkService/src/main/java/com/simple/enums/EnumValidStatus.java View File

@@ -0,0 +1,38 @@
package com.simple.enums;

/**
* Created by Stormeye on 2018/08/09.
*/
public enum EnumValidStatus {

// 1.时间范围(valid_start_date,valid_end_date). 2领取后几日有效(valid_days)

VALID_RANGE(1, "时间范围"),
VALID_DAYS(2, "领取后几日有效")
;

public static EnumValidStatus getEnum(Integer code) {
for (EnumValidStatus value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumValidStatus(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 1
- 1
mallinkService/src/main/java/com/simple/mapper/WxAppinfoMapper.java View File

@@ -10,7 +10,7 @@ public interface WxAppinfoMapper extends CommonMapper<WxAppinfo, String> {
List<WxAppinfo> findList(WxAppinfo wxAppinfo);
WxAppinfo findByAppId(String appId);


+ 3
- 4
mallinkService/src/main/java/com/simple/mapper/WxCUserMapper.java View File

@@ -5,13 +5,12 @@ import com.simple.common.CommonMapper;
import org.apache.ibatis.annotations.Param;
import com.simple.domain.po.WxCUser;

public interface WxCUserMapper extends CommonMapper<WxCUser, String> {
public interface WxCUserMapper extends CommonMapper<WxCUser, Long> {

List<WxCUser> findList(WxCUser wxCUser);
WxCUser findByOpenId(WxCUser record);

WxCUser findByToken(String token);
}

+ 17
- 0
mallinkService/src/main/java/com/simple/mapper/WxCouponOrderMapper.java View File

@@ -0,0 +1,17 @@
package com.simple.mapper;

import java.util.*;
import com.simple.common.CommonMapper;
import org.apache.ibatis.annotations.Param;
import com.simple.domain.po.WxCouponOrder;

public interface WxCouponOrderMapper extends CommonMapper<WxCouponOrder, Long> {

List<WxCouponOrder> findList(WxCouponOrder wxCouponOrder);

}

+ 10
- 2
mallinkService/src/main/java/com/simple/service/WxAppinfoService.java View File

@@ -10,8 +10,8 @@ public interface WxAppinfoService {
* 根据实体查询分页列表
*
* @param record
* @param offset
* @param limit
* @param pageIndex
* @param pageSize
* @return
*/
PageInfo<WxAppinfo> listAsPage(WxAppinfo record, Integer pageIndex, Integer pageSize);
@@ -23,6 +23,14 @@ public interface WxAppinfoService {
* @return
*/
WxAppinfo getById(Long id);

/**
* 根据appId获得实体
*
* @param appId
* @return
*/
WxAppinfo getByAppId(String appId);
/**
* 保存或更新实体


+ 17
- 1
mallinkService/src/main/java/com/simple/service/WxCUserService.java View File

@@ -25,12 +25,28 @@ public interface WxCUserService {
*/
WxCUser getById(Long id);

/**
* 根据token获得实体
*
* @param token
* @return
*/
WxCUser getByToken(String token);

/**
* 根据openId获得实体
*
* @param record
* @return
*/
WxCUser getByOpenId(WxCUser record);

/**
* 保存或更新实体
*
* @param record
*/
void saveOrUpdate(WxCUser record);
int saveOrUpdate(WxCUser record);

/**
* 根据Id删除实体


+ 4
- 2
mallinkService/src/main/java/com/simple/service/WxOrderService.java View File

@@ -2,6 +2,7 @@ package com.simple.service;

import java.util.*;
import com.github.pagehelper.PageInfo;
import com.simple.domain.po.WxCUser;
import com.simple.domain.po.WxOrder;
import com.simple.domain.vo.OrderVo;
import com.simple.enums.EnumOrderStatus;
@@ -37,10 +38,11 @@ public interface WxOrderService {

/**
* 提交订单
* @param record
* @param user
* @param couponId
* @return 订单id
*/
WxOrder saveOrder(WxOrder record);
WxOrder saveOrder(WxCUser user, Long couponId);

/**
* 更新订单状态


+ 4
- 0
mallinkService/src/main/java/com/simple/service/impl/WxAppinfoServiceImpl.java View File

@@ -16,6 +16,10 @@ public class WxAppinfoServiceImpl implements WxAppinfoService {
@Autowired
WxAppinfoMapper wxAppinfoMapper;

@Override
public WxAppinfo getByAppId(String appId) {
return wxAppinfoMapper.findByAppId(appId);
}

@Override
public PageInfo<WxAppinfo> listAsPage(WxAppinfo record, Integer pageIndex, Integer pageSize) {


+ 23
- 12
mallinkService/src/main/java/com/simple/service/impl/WxCUserServiceImpl.java View File

@@ -12,7 +12,7 @@ import com.simple.common.IdWorker;

@Service
public class WxCUserServiceImpl implements WxCUserService {
@Autowired
WxCUserMapper wxCUserMapper;

@@ -28,15 +28,32 @@ public class WxCUserServiceImpl implements WxCUserService {
}

@Override
public void saveOrUpdate(WxCUser record) {
if (record.getId() == null) {
public WxCUser getByOpenId(WxCUser record) {
return wxCUserMapper.findByOpenId(record);
}

@Override
public WxCUser getByToken(String token) {
return wxCUserMapper.findByToken(token);
}

@Override
public int saveOrUpdate(WxCUser user) {
int ret = 0;
Date curr = new Date();
if (user.getId() == null) {
//record.setId(UUID.randomUUID().toString().replaceAll("-", ""));
final IdWorker idWorker = IdWorker.get();
record.setId(idWorker.nextId());
wxCUserMapper.insertSelective(record);
user.setId(idWorker.nextId());
user.setCreateDate(curr);
user.setUpdateDate(curr);
ret = wxCUserMapper.insertSelective(user);
} else {
wxCUserMapper.updateByPrimaryKeySelective(record);
user.setUpdateDate(curr);
ret =wxCUserMapper.updateByPrimaryKeySelective(user);
}

return ret;
}

@Override
@@ -45,10 +62,4 @@ public class WxCUserServiceImpl implements WxCUserService {
}
}

+ 74
- 14
mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java View File

@@ -1,16 +1,24 @@
package com.simple.service.impl;

import java.math.BigDecimal;
import java.util.*;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.simple.common.ErrorCode;
import com.simple.domain.po.WxCUser;
import com.simple.domain.po.WxCoupon;
import com.simple.domain.po.WxCouponOrder;
import com.simple.domain.po.WxOrder;
import com.simple.domain.vo.OrderVo;
import com.simple.enums.EnumCouponOrderStatus;
import com.simple.enums.EnumOrderStatus;
import com.simple.enums.EnumPayType;
import com.simple.enums.EnumValidStatus;
import com.simple.exception.MallinkException;
import com.simple.mapper.WxCUserMapper;
import com.simple.mapper.WxCouponMapper;
import com.simple.mapper.WxCouponOrderMapper;
import com.simple.mapper.WxOrderMapper;
import com.simple.service.WxOrderService;
import com.simple.utils.RedisLock;
@@ -29,12 +37,18 @@ public class WxOrderServiceImpl implements WxOrderService {
@Autowired
RedisLock redisLock;

@Autowired
WxCUserMapper wxCUserMapper;

@Autowired
WxCouponMapper wxCouponMapper;

@Autowired
WxOrderMapper wxOrderMapper;

@Autowired
WxCouponOrderMapper wxCouponOrderMapper;

@Override
public PageInfo<WxOrder> listAsPage(WxOrder record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxOrderMapper.findList(record));
@@ -52,25 +66,34 @@ public class WxOrderServiceImpl implements WxOrderService {

@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public WxOrder saveOrder(WxOrder record) {

String couponIdStr = String.valueOf(record.getCouponId());
public WxOrder saveOrder(WxCUser user, Long couponId) {
String couponIdStr = String.valueOf(couponId);
WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(couponId);
if (coupon == null) {
logger.error("券不存在, couponId: " + couponIdStr);
throw new MallinkException(ErrorCode.COUPON_IS_EMPTY);
}
//加锁
long time = System.currentTimeMillis() + RedisLock.TIMEOUT;
String timeStr = String.valueOf(time);
if(!redisLock.lock(couponIdStr, timeStr)) {
logger.error("此券被锁定, couponId: " + record.getCouponId());
logger.error("此券被锁定, couponId: " + couponIdStr);
throw new MallinkException(ErrorCode.TOO_MANY_REQUEST);
}

BigDecimal payPrice = null;
int payment = 0;

Date curr = new Date();
Date valid_date = null;

try {
// 检查 优惠券 库存
WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(record.getCouponId());
if (coupon.getRemainInventory() <= 0) {
//解锁
redisLock.unlock(couponIdStr, timeStr);

logger.error("此券库存为0, couponId: " + record.getCouponId());
logger.error("此券库存为0, couponId: " + couponIdStr);
throw new MallinkException(ErrorCode.REMAIN_IS_EMPTY);
}
// 减库存
@@ -80,24 +103,60 @@ public class WxOrderServiceImpl implements WxOrderService {
//解锁
redisLock.unlock(couponIdStr, timeStr);

logger.error("此券减库存失败, couponId: " + record.getCouponId());
logger.error("此券减库存失败, couponId: " + couponIdStr);
throw new MallinkException(ErrorCode.ORDER_IS_FAIL);
}

payPrice = coupon.getSalePrice();

BigDecimal ll = coupon.getSalePrice().multiply(new BigDecimal(100));
payment = ll.intValue();

valid_date = (coupon.getValidType() == EnumValidStatus.VALID_RANGE.getCode())?coupon.getValidEndDate(): new Date((curr.getTime()/1000+coupon.getValidDays()*24*60*60)*1000);

final IdWorker idWorker = IdWorker.get();
Long orderNumber = idWorker.nextId();

WxOrder record = new WxOrder();


try {
// 保存订单
final IdWorker idWorker = IdWorker.get();
record.setId(idWorker.nextId());
record.setStatus(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode());
Date curr = new Date();
record.setId(orderNumber);
record.setOrderNumber(orderNumber);
record.setCUserId(user.getId());
record.setPaymentType(EnumPayType.PAY_PAYMENT.getCode());
record.setPayment(payment);
record.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode());
record.setCreateDate(curr);
record.setUpdateDate(curr);
wxOrderMapper.insertSelective(record);
// 返回 record
return record;

} catch (RuntimeException e) {
logger.error("保存订单:" + e.getMessage());
throw new MallinkException(ErrorCode.ORDER_IS_FAIL);
}

try {
WxCouponOrder couponOrder = new WxCouponOrder();
couponOrder.setId(idWorker.nextId());
couponOrder.setCouponId(couponId);
couponOrder.setCUserId(user.getId());
couponOrder.setOrderId(orderNumber);
couponOrder.setExpiredTime(valid_date);
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode());
couponOrder.setCreateDate(curr);
couponOrder.setUpdateDate(curr);
couponOrder.setCouponPrice(payPrice);

wxCouponOrderMapper.insertSelective(couponOrder);

} catch (RuntimeException e) {
logger.error("WxCouponOrder:" + e.getMessage());
throw new MallinkException(ErrorCode.ORDER_IS_FAIL);
}

return record;
}

@Override
@@ -109,7 +168,7 @@ public class WxOrderServiceImpl implements WxOrderService {
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND);
}
Date currentDate = new Date();
/*
// 0:待付款
// 1:已支付
if (enumOrderStatus == EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS) {
@@ -139,6 +198,7 @@ public class WxOrderServiceImpl implements WxOrderService {
// 5:退款失败
updateRecord.setStatus(enumOrderStatus.getCode());
updateRecord.setUpdateDate(currentDate);
*/
return wxOrderMapper.updateByPrimaryKey(updateRecord);
}



+ 4
- 4
mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java View File

@@ -78,7 +78,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
logger.warn("pay order, order not allow, repaymentReq: " + record.toString() +", payWay: " + payWay.toString());
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND);
}
if (order.getStatus() != EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()) {
if (order.getOrderStatus() != EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()) {
logger.warn("pay order, order status not allow, repaymentReq: " + order.toString() + " , payWay: " + payWay.toString());
throw new MallinkException(ErrorCode.ORDER_IS_NOT_PAY);
}
@@ -97,8 +97,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
record.setPayTimeEnd(currentTime);
// 支付单号
record.setPayOrderNo(String.valueOf(id));
BigDecimal pl = order.getPayment().multiply(new BigDecimal(100));
record.setPayAmount(pl.intValue());
record.setPayAmount(order.getPayment());
record.setPayVendor(EnumPayWay.PAY_WAY_WEAPP.getCode());
record.setPayOrderStatus(EnumPayStatus.PAY_WAY_WAIT.getCode());

@@ -270,7 +269,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
updatePayOrder.setPayOrderStatus(EnumPayStatus.PAY_WAY_SUCCESS.getCode());
updatePayOrder.setTransactionId(transactionId);
wxPayOrderMapper.updateByPrimaryKeySelective(updatePayOrder);
/*
Map<String, String> msgMap = new HashMap<>();
try {
msgMap.put("name", String.valueOf(order.getCouponId()));
@@ -282,6 +281,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
} catch (Exception e) {
logger.error("pay success handle, sms send exception, payOrderi: " + updatePayOrder+ ", msgMap: " + msgMap.toString() + ", e: " + e.getMessage());
}
*/
}




+ 4
- 0
mallinkService/src/main/java/com/simple/service/impl/WxUserCouponServiceImpl.java View File

@@ -37,6 +37,7 @@ public class WxUserCouponServiceImpl implements WxUserCouponService {
//查询订单表
WxOrder wxOrder = new WxOrder();
wxOrder.setCUserId(userId);
/*
wxOrder.setCouponStatus(status);
List<WxOrder> orders = wxOrderService.findList(wxOrder);
List<String> ids = orders.stream().map(p->p.getCouponId()+"").distinct().collect(Collectors.toList());
@@ -50,15 +51,18 @@ public class WxUserCouponServiceImpl implements WxUserCouponService {
wxUserCoupons.add(getWxUserCoupon(temp,couponNamesMap.get(temp.getCouponId())));
}
}
*/
return wxUserCoupons;
}
public WxUserCouponDto getWxUserCoupon(WxOrder wxOrder, String title){
WxUserCouponDto wxUserCoupon = new WxUserCouponDto();
wxUserCoupon.setOrderId(wxOrder.getId());
wxUserCoupon.setcUserId(wxOrder.getCUserId());
/*
wxUserCoupon.setCouponId(wxOrder.getCouponId());
wxUserCoupon.setCouponStatus(wxOrder.getCouponStatus());
wxUserCoupon.setValidDate(wxOrder.getValidDate());
*/
wxUserCoupon.setCouponTitle(title);
return wxUserCoupon;
}


+ 26
- 14
mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml View File

@@ -4,18 +4,19 @@
<resultMap id="BaseResultMap" type="com.simple.domain.po.WxAppinfo">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId" />
<result column="appid" jdbcType="VARCHAR" property="appid" />
<result column="secret" jdbcType="VARCHAR" property="secret" />
<result column="app_id" jdbcType="VARCHAR" property="appId" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="secret" jdbcType="VARCHAR" property="secret" />
<result column="token" jdbcType="VARCHAR" property="token" />
<result column="aeskey" jdbcType="VARCHAR" property="aeskey" />
<result column="aes_key" jdbcType="VARCHAR" property="aesKey" />
<result column="msg_data_format" jdbcType="VARCHAR" property="msgDataFormat" />
<result column="access_token" jdbcType="VARCHAR" property="accessToken" />
<result column="last_token_time" jdbcType="TIMESTAMP" property="lastTokenTime" />
<result column="expires_in" jdbcType="INTEGER" property="expiresIn" />
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`appid`,`secret`,`name`,`token`,`aeskey`,`access_token`,`last_token_time`,`expires_in`
`id`,`tenant_id`,`app_id`,`name`,`secret`,`token`,`aes_key`,`msg_data_format`,`access_token`,`last_token_time`,`expires_in`
</sql>

<sql id="dynamicWhereConditions">
@@ -31,18 +32,18 @@
</if>
<if test=" null != appid ">
and `appid` like concat('%', #{appid},'%')
<if test=" null != appId ">
and `app_id` like concat('%', #{appId},'%')
</if>
<if test=" null != secret ">
and `secret` like concat('%', #{secret},'%')
<if test=" null != name ">
and `name` like concat('%', #{name},'%')
</if>
<if test=" null != name ">
and `name` like concat('%', #{name},'%')
<if test=" null != secret ">
and `secret` like concat('%', #{secret},'%')
</if>
@@ -51,8 +52,13 @@
</if>
<if test=" null != aeskey ">
and `aeskey` like concat('%', #{aeskey},'%')
<if test=" null != aesKey ">
and `aes_key` like concat('%', #{aesKey},'%')
</if>
<if test=" null != msgDataFormat ">
and `msg_data_format` like concat('%', #{msgDataFormat},'%')
</if>
@@ -83,8 +89,14 @@
select <include refid="allColumns" /> from wx_appinfo
<include refid="dynamicWhereConditions" />
</select>

<select id="findByAppId" parameterType="java.lang.String" resultMap="BaseResultMap">
SELECT *
FROM wx_appinfo
WHERE `app_id` = #{appId}
</select>




+ 29
- 7
mallinkService/src/main/resources/mapper/WxCUserMapper.xml View File

@@ -24,10 +24,13 @@
<result column="score" jdbcType="INTEGER" property="score" />
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate" />
<result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
<result column="app_id" jdbcType="VARCHAR" property="appId" />
<result column="token" jdbcType="VARCHAR" property="token" />
<result column="expire_time" jdbcType="TIMESTAMP" property="expireTime" />
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`open_id`,`union_id`,`nick_name`,`gender`,`avatar_url`,`phone`,`pure_phone`,`city`,`province`,`language`,`country_code`,`register_ip`,`verify_code_phone`,`qrcode_source`,`scene`,`scene_address`,`session_key`,`score`,`update_date`,`create_date`
`id`,`tenant_id`,`open_id`,`union_id`,`nick_name`,`gender`,`avatar_url`,`phone`,`pure_phone`,`city`,`province`,`language`,`country_code`,`register_ip`,`verify_code_phone`,`qrcode_source`,`scene`,`scene_address`,`session_key`,`score`,`update_date`,`create_date`,`app_id`,`token`,`expire_time`
</sql>

<sql id="dynamicWhereConditions">
@@ -141,6 +144,21 @@
<if test=" null != createDate ">
and `create_date` = #{createDate}
</if>
<if test=" null != appId ">
and `app_id` like concat('%', #{appId},'%')
</if>
<if test=" null != token ">
and `token` like concat('%', #{token},'%')
</if>
<if test=" null != expireTime ">
and `expire_time` = #{expireTime}
</if>
<if test=" null != ids ">
and id in
@@ -155,10 +173,14 @@
select <include refid="allColumns" /> from wx_c_user
<include refid="dynamicWhereConditions" />
</select>

<select id="findByOpenId" parameterType="com.simple.domain.po.WxCUser" resultMap="BaseResultMap">
select * from wx_c_user
where `app_id` = #{appId} and `open_id` = #{openId}
</select>

<select id="findByToken" resultMap="BaseResultMap">
select * from wx_c_user
where `token` = #{token}
</select>
</mapper>

+ 98
- 0
mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml View File

@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.simple.mapper.WxCouponOrderMapper">
<resultMap id="BaseResultMap" type="com.simple.domain.po.WxCouponOrder">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="tenant_id" jdbcType="BIGINT" property="tenantId" />
<result column="coupon_id" jdbcType="BIGINT" property="couponId" />
<result column="c_user_id" jdbcType="BIGINT" property="cUserId" />
<result column="b_user_id" jdbcType="BIGINT" property="bUserId" />
<result column="order_id" jdbcType="BIGINT" property="orderId" />
<result column="expired_time" jdbcType="TIMESTAMP" property="expiredTime" />
<result column="coupon_order_status" jdbcType="INTEGER" property="couponOrderStatus" />
<result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate" />
<result column="coupon_price" jdbcType="DECIMAL" property="couponPrice" />
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`coupon_id`,`c_user_id`,`b_user_id`,`order_id`,`expired_time`,`coupon_order_status`,`create_date`,`update_date`,`coupon_price`
</sql>

<sql id="dynamicWhereConditions">
where 1 = 1
<if test=" null != id ">
and `id` = #{id}
</if>
<if test=" null != tenantId ">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != couponId ">
and `coupon_id` = #{couponId}
</if>
<if test=" null != cUserId ">
and `c_user_id` = #{cUserId}
</if>
<if test=" null != bUserId ">
and `b_user_id` = #{bUserId}
</if>
<if test=" null != orderId ">
and `order_id` = #{orderId}
</if>
<if test=" null != expiredTime ">
and `expired_time` = #{expiredTime}
</if>
<if test=" null != couponOrderStatus ">
and `coupon_order_status` = #{couponOrderStatus}
</if>
<if test=" null != createDate ">
and `create_date` = #{createDate}
</if>
<if test=" null != updateDate ">
and `update_date` = #{updateDate}
</if>
<if test=" null != couponPrice ">
and `coupon_price` = #{couponPrice}
</if>
<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns"> order by ${sortColumns} </if>
</sql>
<select id="findList" parameterType="com.simple.domain.po.WxCouponOrder" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_coupon_order
<include refid="dynamicWhereConditions" />
</select>
</mapper>

+ 20
- 32
mallinkService/src/main/resources/mapper/WxOrderMapper.xml View File

@@ -3,22 +3,20 @@
<mapper namespace="com.simple.mapper.WxOrderMapper">
<resultMap id="BaseResultMap" type="com.simple.domain.po.WxOrder">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="order_number" jdbcType="BIGINT" property="orderNumber" />
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId" />
<result column="coupon_id" jdbcType="BIGINT" property="couponId" />
<result column="c_user_id" jdbcType="BIGINT" property="cUserId" />
<result column="payment" jdbcType="DECIMAL" property="payment" />
<result column="b_user_id" jdbcType="BIGINT" property="bUserId" />
<result column="payment_type" jdbcType="INTEGER" property="paymentType" />
<result column="payment" jdbcType="INTEGER" property="payment" />
<result column="payment_time" jdbcType="TIMESTAMP" property="paymentTime" />
<result column="status" jdbcType="INTEGER" property="status" />
<result column="coupon_status" jdbcType="INTEGER" property="couponStatus" />
<result column="valid_date" jdbcType="TIMESTAMP" property="validDate" />
<result column="refund" jdbcType="INTEGER" property="refund" />
<result column="refund_time" jdbcType="TIMESTAMP" property="refundTime" />
<result column="order_status" jdbcType="INTEGER" property="orderStatus" />
<result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate" />
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`coupon_id`,`c_user_id`,`payment`,`payment_time`,`status`,`coupon_status`,`valid_date`,`refund`,`refund_time`,`create_date`,`update_date`
`id`,`order_number`,`tenant_id`,`c_user_id`,`b_user_id`,`payment_type`,`payment`,`payment_time`,`order_status`,`create_date`,`update_date`
</sql>

<sql id="dynamicWhereConditions">
@@ -29,13 +27,13 @@
</if>
<if test=" null != tenantId ">
and `tenant_id` like concat('%', #{tenantId},'%')
<if test=" null != orderNumber ">
and `order_number` = #{orderNumber}
</if>
<if test=" null != couponId ">
and `coupon_id` = #{couponId}
<if test=" null != tenantId ">
and `tenant_id` like concat('%', #{tenantId},'%')
</if>
@@ -44,38 +42,28 @@
</if>
<if test=" null != payment ">
and `payment` = #{payment}
</if>
<if test=" null != paymentTime ">
and `payment_time` = #{paymentTime}
</if>
<if test=" null != status ">
and `status` = #{status}
<if test=" null != bUserId ">
and `b_user_id` = #{bUserId}
</if>
<if test=" null != couponStatus ">
and `coupon_status` = #{couponStatus}
<if test=" null != paymentType ">
and `payment_type` = #{paymentType}
</if>
<if test=" null != validDate ">
and `valid_date` = #{validDate}
<if test=" null != payment ">
and `payment` = #{payment}
</if>
<if test=" null != refund ">
and `refund` = #{refund}
<if test=" null != paymentTime ">
and `payment_time` = #{paymentTime}
</if>
<if test=" null != refundTime ">
and `refund_time` = #{refundTime}
<if test=" null != orderStatus ">
and `order_status` = #{orderStatus}
</if>


Loading…
Cancel
Save