diff --git a/mallinkCApi/pom.xml b/mallinkCApi/pom.xml
index 426d7f45e..4ef0e25ce 100644
--- a/mallinkCApi/pom.xml
+++ b/mallinkCApi/pom.xml
@@ -25,11 +25,6 @@
mallinkService
1.0
-
- com.github.binarywang
- weixin-java-miniapp
- 3.0.0
-
diff --git a/mallinkCApi/src/main/java/com/simple/CApplication.java b/mallinkCApi/src/main/java/com/simple/CApplication.java
index 6e64298dd..c9e810cd4 100644
--- a/mallinkCApi/src/main/java/com/simple/CApplication.java
+++ b/mallinkCApi/src/main/java/com/simple/CApplication.java
@@ -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) {
diff --git a/mallinkCApi/src/main/java/com/simple/annotation/AuthIgnore.java b/mallinkCApi/src/main/java/com/simple/annotation/AuthIgnore.java
new file mode 100644
index 000000000..e92b1378a
--- /dev/null
+++ b/mallinkCApi/src/main/java/com/simple/annotation/AuthIgnore.java
@@ -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 {
+
+}
diff --git a/mallinkCApi/src/main/java/com/simple/annotation/LoginUser.java b/mallinkCApi/src/main/java/com/simple/annotation/LoginUser.java
new file mode 100644
index 000000000..b5ac735c0
--- /dev/null
+++ b/mallinkCApi/src/main/java/com/simple/annotation/LoginUser.java
@@ -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 {
+
+}
diff --git a/mallinkCApi/src/main/java/com/simple/config/CorsConfig.java b/mallinkCApi/src/main/java/com/simple/config/CorsConfig.java
new file mode 100644
index 000000000..d33a7559e
--- /dev/null
+++ b/mallinkCApi/src/main/java/com/simple/config/CorsConfig.java
@@ -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);
+ }
+
+}
diff --git a/mallinkCApi/src/main/java/com/simple/config/Swagger2Config.java b/mallinkCApi/src/main/java/com/simple/config/Swagger2Config.java
new file mode 100644
index 000000000..136fbd3fb
--- /dev/null
+++ b/mallinkCApi/src/main/java/com/simple/config/Swagger2Config.java
@@ -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 pars = new ArrayList();
+ //增加一个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();
+ }
+
+}
\ No newline at end of file
diff --git a/mallinkCApi/src/main/java/com/simple/config/WebMvcConfig.java b/mallinkCApi/src/main/java/com/simple/config/WebMvcConfig.java
new file mode 100644
index 000000000..4ba634305
--- /dev/null
+++ b/mallinkCApi/src/main/java/com/simple/config/WebMvcConfig.java
@@ -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 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/");
+
+ }
+}
\ No newline at end of file
diff --git a/mallinkCApi/src/main/java/com/simple/controller/BaseController.java b/mallinkCApi/src/main/java/com/simple/controller/BaseController.java
index 72bcf7dcf..427a64661 100644
--- a/mallinkCApi/src/main/java/com/simple/controller/BaseController.java
+++ b/mallinkCApi/src/main/java/com/simple/controller/BaseController.java
@@ -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();
+ }
}
diff --git a/mallinkCApi/src/main/java/com/simple/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/simple/controller/WxOrderController.java
index 4c2653cf8..cb67e3bc8 100644
--- a/mallinkCApi/src/main/java/com/simple/controller/WxOrderController.java
+++ b/mallinkCApi/src/main/java/com/simple/controller/WxOrderController.java
@@ -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 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 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();
}
diff --git a/mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java
index cf335c68a..b45aae627 100755
--- a/mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java
+++ b/mallinkCApi/src/main/java/com/simple/controller/WxUserGrantController.java
@@ -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 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 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 map) {
+ @ApiOperation(value = "授权后获取用户的手机号", notes="{\"encryptedData\":\"string\",\"iv\":\"string\"}")
+ public ResultData getUserPhone(@RequestBody Map 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
diff --git a/mallinkCApi/src/main/java/com/simple/interceptor/AuthorizationInterceptor.java b/mallinkCApi/src/main/java/com/simple/interceptor/AuthorizationInterceptor.java
new file mode 100644
index 000000000..32a62d064
--- /dev/null
+++ b/mallinkCApi/src/main/java/com/simple/interceptor/AuthorizationInterceptor.java
@@ -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;
+ }
+}
diff --git a/mallinkCApi/src/main/java/com/simple/resolver/LoginUserHandlerMethodArgumentResolver.java b/mallinkCApi/src/main/java/com/simple/resolver/LoginUserHandlerMethodArgumentResolver.java
new file mode 100644
index 000000000..a39617a98
--- /dev/null
+++ b/mallinkCApi/src/main/java/com/simple/resolver/LoginUserHandlerMethodArgumentResolver.java
@@ -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;
+ }
+}
diff --git a/mallinkCApi/src/main/resources/application.yml b/mallinkCApi/src/main/resources/application.yml
index 969f60a12..278285ea9 100644
--- a/mallinkCApi/src/main/resources/application.yml
+++ b/mallinkCApi/src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
- port: 8000
+ port: 8001
context-path: /C
spring:
diff --git a/mallinkService/src/main/java/com/simple/common/ErrorCode.java b/mallinkService/src/main/java/com/simple/common/ErrorCode.java
index 3ed749c3d..df8714916 100644
--- a/mallinkService/src/main/java/com/simple/common/ErrorCode.java
+++ b/mallinkService/src/main/java/com/simple/common/ErrorCode.java
@@ -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解密失败"),
/**
diff --git a/mallinkService/src/main/java/com/simple/common/Result.java b/mallinkService/src/main/java/com/simple/common/Result.java
index 8a9b4e0bd..85ac9069d 100644
--- a/mallinkService/src/main/java/com/simple/common/Result.java
+++ b/mallinkService/src/main/java/com/simple/common/Result.java
@@ -24,4 +24,9 @@ public class Result {
this.message = message;
}
+ public Result(ErrorCode errorCode) {
+ this.code = errorCode.getCode();
+ this.message = errorCode.getMessage();
+ }
+
}
diff --git a/mallinkService/src/main/java/com/simple/common/ResultData.java b/mallinkService/src/main/java/com/simple/common/ResultData.java
index 3590caff0..563c0cede 100644
--- a/mallinkService/src/main/java/com/simple/common/ResultData.java
+++ b/mallinkService/src/main/java/com/simple/common/ResultData.java
@@ -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 toHashMap() {
HashMap map = new HashMap<>(3);
map.put("code", this.code);
diff --git a/mallinkService/src/main/java/com/simple/domain/po/WxAppinfo.java b/mallinkService/src/main/java/com/simple/domain/po/WxAppinfo.java
index 4f906b6d4..6f83790aa 100644
--- a/mallinkService/src/main/java/com/simple/domain/po/WxAppinfo.java
+++ b/mallinkService/src/main/java/com/simple/domain/po/WxAppinfo.java
@@ -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")
diff --git a/mallinkService/src/main/java/com/simple/domain/po/WxCUser.java b/mallinkService/src/main/java/com/simple/domain/po/WxCUser.java
index 512523e16..1680ed024 100644
--- a/mallinkService/src/main/java/com/simple/domain/po/WxCUser.java
+++ b/mallinkService/src/main/java/com/simple/domain/po/WxCUser.java
@@ -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 ids;
+ protected List ids;
@Transient
protected String sortColumns;
@@ -32,10 +34,11 @@ public class WxCUser implements Serializable {
return sortColumns;
}
- public List getIds() {
+ public List getIds() {
return ids;
}
- public void setIds(List ids) {
+
+ public void setIds(List 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);
+ }
+ }
}
diff --git a/mallinkService/src/main/java/com/simple/domain/po/WxCouponOrder.java b/mallinkService/src/main/java/com/simple/domain/po/WxCouponOrder.java
new file mode 100644
index 000000000..e3389bc10
--- /dev/null
+++ b/mallinkService/src/main/java/com/simple/domain/po/WxCouponOrder.java
@@ -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 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 getIds() {
+ return ids;
+ }
+
+ public void setIds(List 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 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));
+ }
+ }
+}
diff --git a/mallinkService/src/main/java/com/simple/domain/po/WxOrder.java b/mallinkService/src/main/java/com/simple/domain/po/WxOrder.java
index bc0a99e15..8b624196d 100644
--- a/mallinkService/src/main/java/com/simple/domain/po/WxOrder.java
+++ b/mallinkService/src/main/java/com/simple/domain/po/WxOrder.java
@@ -16,7 +16,7 @@ public class WxOrder implements Serializable {
protected Long id;
@Transient
- protected List ids;
+ protected List ids;
@Transient
protected String sortColumns;
@@ -32,73 +32,80 @@ public class WxOrder implements Serializable {
return sortColumns;
}
- public List getIds() {
+ public List getIds() {
return ids;
}
- public void setIds(List ids) {
+
+ public void setIds(List 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 fList = new ArrayList();
+ java.util.List fList = new java.util.ArrayList();
for (int k = 0; k < cols.length; k++) {
fList.add(Field.valueOf(cols[k]));
}
diff --git a/mallinkService/src/main/java/com/simple/enums/EnumCouponOrderStatus.java b/mallinkService/src/main/java/com/simple/enums/EnumCouponOrderStatus.java
new file mode 100644
index 000000000..0fa0adbc8
--- /dev/null
+++ b/mallinkService/src/main/java/com/simple/enums/EnumCouponOrderStatus.java
@@ -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;
+ }
+}
diff --git a/mallinkService/src/main/java/com/simple/enums/EnumPayType.java b/mallinkService/src/main/java/com/simple/enums/EnumPayType.java
new file mode 100644
index 000000000..d9ba40067
--- /dev/null
+++ b/mallinkService/src/main/java/com/simple/enums/EnumPayType.java
@@ -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;
+ }
+}
diff --git a/mallinkService/src/main/java/com/simple/enums/EnumValidStatus.java b/mallinkService/src/main/java/com/simple/enums/EnumValidStatus.java
new file mode 100644
index 000000000..4245aad42
--- /dev/null
+++ b/mallinkService/src/main/java/com/simple/enums/EnumValidStatus.java
@@ -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;
+ }
+}
diff --git a/mallinkService/src/main/java/com/simple/mapper/WxAppinfoMapper.java b/mallinkService/src/main/java/com/simple/mapper/WxAppinfoMapper.java
index 660e650a8..23cca95e7 100644
--- a/mallinkService/src/main/java/com/simple/mapper/WxAppinfoMapper.java
+++ b/mallinkService/src/main/java/com/simple/mapper/WxAppinfoMapper.java
@@ -10,7 +10,7 @@ public interface WxAppinfoMapper extends CommonMapper {
List findList(WxAppinfo wxAppinfo);
-
+ WxAppinfo findByAppId(String appId);
diff --git a/mallinkService/src/main/java/com/simple/mapper/WxCUserMapper.java b/mallinkService/src/main/java/com/simple/mapper/WxCUserMapper.java
index 3371bb978..f370d5697 100644
--- a/mallinkService/src/main/java/com/simple/mapper/WxCUserMapper.java
+++ b/mallinkService/src/main/java/com/simple/mapper/WxCUserMapper.java
@@ -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 {
+public interface WxCUserMapper extends CommonMapper {
List findList(WxCUser wxCUser);
+ WxCUser findByOpenId(WxCUser record);
-
-
-
+ WxCUser findByToken(String token);
}
diff --git a/mallinkService/src/main/java/com/simple/mapper/WxCouponOrderMapper.java b/mallinkService/src/main/java/com/simple/mapper/WxCouponOrderMapper.java
new file mode 100644
index 000000000..0d35df6ad
--- /dev/null
+++ b/mallinkService/src/main/java/com/simple/mapper/WxCouponOrderMapper.java
@@ -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 {
+
+ List findList(WxCouponOrder wxCouponOrder);
+
+
+
+
+
+
+}
diff --git a/mallinkService/src/main/java/com/simple/service/WxAppinfoService.java b/mallinkService/src/main/java/com/simple/service/WxAppinfoService.java
index 17caa32da..bf9974e99 100644
--- a/mallinkService/src/main/java/com/simple/service/WxAppinfoService.java
+++ b/mallinkService/src/main/java/com/simple/service/WxAppinfoService.java
@@ -10,8 +10,8 @@ public interface WxAppinfoService {
* 根据实体查询分页列表
*
* @param record
- * @param offset
- * @param limit
+ * @param pageIndex
+ * @param pageSize
* @return
*/
PageInfo 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);
/**
* 保存或更新实体
diff --git a/mallinkService/src/main/java/com/simple/service/WxCUserService.java b/mallinkService/src/main/java/com/simple/service/WxCUserService.java
index c3311f05b..dcb7a6d11 100644
--- a/mallinkService/src/main/java/com/simple/service/WxCUserService.java
+++ b/mallinkService/src/main/java/com/simple/service/WxCUserService.java
@@ -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删除实体
diff --git a/mallinkService/src/main/java/com/simple/service/WxOrderService.java b/mallinkService/src/main/java/com/simple/service/WxOrderService.java
index 8611a7aac..b8f63c30a 100644
--- a/mallinkService/src/main/java/com/simple/service/WxOrderService.java
+++ b/mallinkService/src/main/java/com/simple/service/WxOrderService.java
@@ -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);
/**
* 更新订单状态
diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxAppinfoServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxAppinfoServiceImpl.java
index 09f919355..7d48f6f20 100644
--- a/mallinkService/src/main/java/com/simple/service/impl/WxAppinfoServiceImpl.java
+++ b/mallinkService/src/main/java/com/simple/service/impl/WxAppinfoServiceImpl.java
@@ -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 listAsPage(WxAppinfo record, Integer pageIndex, Integer pageSize) {
diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxCUserServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxCUserServiceImpl.java
index 589ea41a5..6ada899ac 100644
--- a/mallinkService/src/main/java/com/simple/service/impl/WxCUserServiceImpl.java
+++ b/mallinkService/src/main/java/com/simple/service/impl/WxCUserServiceImpl.java
@@ -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 {
}
-
-
-
-
-
-
}
diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java
index 8314b3a6b..e9f2d641a 100644
--- a/mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java
+++ b/mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java
@@ -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 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);
}
diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java
index dd7c056f0..852d8c5b3 100644
--- a/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java
+++ b/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java
@@ -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 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());
}
+ */
}
diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxUserCouponServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxUserCouponServiceImpl.java
index 26fd32307..28a8fdd7c 100644
--- a/mallinkService/src/main/java/com/simple/service/impl/WxUserCouponServiceImpl.java
+++ b/mallinkService/src/main/java/com/simple/service/impl/WxUserCouponServiceImpl.java
@@ -37,6 +37,7 @@ public class WxUserCouponServiceImpl implements WxUserCouponService {
//查询订单表
WxOrder wxOrder = new WxOrder();
wxOrder.setCUserId(userId);
+ /*
wxOrder.setCouponStatus(status);
List orders = wxOrderService.findList(wxOrder);
List 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;
}
diff --git a/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml b/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml
index a5f522c90..5f3170dcd 100644
--- a/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml
+++ b/mallinkService/src/main/resources/mapper/WxAppinfoMapper.xml
@@ -4,18 +4,19 @@
-
-
+
+
-
+
+
- `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`
@@ -31,18 +32,18 @@
-
- and `appid` like concat('%', #{appid},'%')
+
+ and `app_id` like concat('%', #{appId},'%')
-
- and `secret` like concat('%', #{secret},'%')
+
+ and `name` like concat('%', #{name},'%')
-
- and `name` like concat('%', #{name},'%')
+
+ and `secret` like concat('%', #{secret},'%')
@@ -51,8 +52,13 @@
-
- and `aeskey` like concat('%', #{aeskey},'%')
+
+ and `aes_key` like concat('%', #{aesKey},'%')
+
+
+
+
+ and `msg_data_format` like concat('%', #{msgDataFormat},'%')
@@ -83,8 +89,14 @@
select from wx_appinfo
-
-
+
+
+
+
diff --git a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml
index 5815c77be..9d9ae3fc5 100644
--- a/mallinkService/src/main/resources/mapper/WxCUserMapper.xml
+++ b/mallinkService/src/main/resources/mapper/WxCUserMapper.xml
@@ -24,10 +24,13 @@
+
+
+
- `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`
@@ -141,6 +144,21 @@
and `create_date` = #{createDate}
+
+
+
+ and `app_id` like concat('%', #{appId},'%')
+
+
+
+
+ and `token` like concat('%', #{token},'%')
+
+
+
+
+ and `expire_time` = #{expireTime}
+
and id in
@@ -155,10 +173,14 @@
select from wx_c_user
-
-
-
-
-
-
+
+
+
+
diff --git a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml
new file mode 100644
index 000000000..d109c4057
--- /dev/null
+++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `id`,`tenant_id`,`coupon_id`,`c_user_id`,`b_user_id`,`order_id`,`expired_time`,`coupon_order_status`,`create_date`,`update_date`,`coupon_price`
+
+
+
+ where 1 = 1
+
+
+ and `id` = #{id}
+
+
+
+
+ and `tenant_id` = #{tenantId}
+
+
+
+
+ and `coupon_id` = #{couponId}
+
+
+
+
+ and `c_user_id` = #{cUserId}
+
+
+
+
+ and `b_user_id` = #{bUserId}
+
+
+
+
+ and `order_id` = #{orderId}
+
+
+
+
+ and `expired_time` = #{expiredTime}
+
+
+
+
+ and `coupon_order_status` = #{couponOrderStatus}
+
+
+
+
+ and `create_date` = #{createDate}
+
+
+
+
+ and `update_date` = #{updateDate}
+
+
+
+
+ and `coupon_price` = #{couponPrice}
+
+
+
+ and id in
+
+ #{idItem}
+
+
+ order by ${sortColumns}
+
+
+
+
+
+
+
+
+
+
diff --git a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml
index 5aff7862a..9f54e0fdf 100644
--- a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml
+++ b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml
@@ -3,22 +3,20 @@
+
-
-
+
+
+
-
-
-
-
-
+
- `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`
@@ -29,13 +27,13 @@
-
- and `tenant_id` like concat('%', #{tenantId},'%')
+
+ and `order_number` = #{orderNumber}
-
- and `coupon_id` = #{couponId}
+
+ and `tenant_id` like concat('%', #{tenantId},'%')
@@ -44,38 +42,28 @@
-
- and `payment` = #{payment}
-
-
-
-
- and `payment_time` = #{paymentTime}
-
-
-
-
- and `status` = #{status}
+
+ and `b_user_id` = #{bUserId}
-
- and `coupon_status` = #{couponStatus}
+
+ and `payment_type` = #{paymentType}
-
- and `valid_date` = #{validDate}
+
+ and `payment` = #{payment}
-
- and `refund` = #{refund}
+
+ and `payment_time` = #{paymentTime}
-
- and `refund_time` = #{refundTime}
+
+ and `order_status` = #{orderStatus}