Просмотр исходного кода

merge for release build

release_toaliyun_real
Stormeye.Wu 7 лет назад
Родитель
Сommit
05992d84af
44 измененных файлов: 759 добавлений и 278 удалений
  1. +1
    -0
      mallinkAdmin/src/main/java/com/simple/UserApplication.java
  2. +1
    -0
      mallinkAdmin/src/main/java/com/simple/config/ShiroConfig.java
  3. +2
    -1
      mallinkAdmin/src/main/java/com/simple/controller/CouponInjectController.java
  4. +14
    -7
      mallinkAdmin/src/main/java/com/simple/controller/HomeController.java
  5. +21
    -16
      mallinkAdmin/src/main/java/com/simple/controller/MallUserInfoController.java
  6. +2
    -2
      mallinkAdmin/src/main/java/com/simple/controller/WxCarCallBackController.java
  7. +12
    -4
      mallinkAdmin/src/main/java/com/simple/controller/WxCouponSendController.java
  8. +0
    -10
      mallinkAdmin/src/main/java/com/simple/controller/WxPayOrderController.java
  9. +70
    -5
      mallinkAdmin/src/main/java/com/simple/controller/WxUserStructureController.java
  10. +20
    -8
      mallinkAdmin/src/main/java/com/simple/schedule/OrderExpiringSchedule.java
  11. +1
    -0
      mallinkAdmin/src/main/resources/application.yml
  12. +9
    -0
      mallinkBApi/src/main/java/com/simple/controller/WxCouponOrderController.java
  13. +10
    -1
      mallinkBApi/src/main/java/com/simple/controller/WxMallController.java
  14. +3
    -1
      mallinkBApi/src/main/resources/application.yml
  15. +11
    -0
      mallinkCApi/src/main/java/com/simple/controller/WxMallController.java
  16. +3
    -1
      mallinkCApi/src/main/resources/application.yml
  17. +13
    -3
      mallinkService/src/main/java/com/simple/common/ErrorCode.java
  18. +19
    -1
      mallinkService/src/main/java/com/simple/domain/po/MallUserInfo.java
  19. +12
    -11
      mallinkService/src/main/java/com/simple/domain/po/WxTemplateMsg.java
  20. +37
    -0
      mallinkService/src/main/java/com/simple/enums/EnumCouponInjectSendType.java
  21. +37
    -0
      mallinkService/src/main/java/com/simple/enums/EnumCouponSendSendType.java
  22. +37
    -0
      mallinkService/src/main/java/com/simple/enums/EnumCouponSendStatus.java
  23. +3
    -3
      mallinkService/src/main/java/com/simple/enums/EnumCouponSendType.java
  24. +38
    -0
      mallinkService/src/main/java/com/simple/enums/EnumCouponValidType.java
  25. +3
    -4
      mallinkService/src/main/java/com/simple/enums/EnumTemplateType.java
  26. +5
    -2
      mallinkService/src/main/java/com/simple/mapper/MallUserInfoMapper.java
  27. +2
    -1
      mallinkService/src/main/java/com/simple/mapper/WxCUserBasicInfoMapper.java
  28. +6
    -3
      mallinkService/src/main/java/com/simple/service/MallUserInfoService.java
  29. +2
    -1
      mallinkService/src/main/java/com/simple/service/WxCUserBasicInfoService.java
  30. +8
    -0
      mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java
  31. +2
    -3
      mallinkService/src/main/java/com/simple/service/WxCouponSendService.java
  32. +8
    -2
      mallinkService/src/main/java/com/simple/service/WxOrderService.java
  33. +0
    -2
      mallinkService/src/main/java/com/simple/service/WxPayOrderService.java
  34. +15
    -7
      mallinkService/src/main/java/com/simple/service/impl/CouponInjectServiceImpl.java
  35. +3
    -4
      mallinkService/src/main/java/com/simple/service/impl/DataTowerServiceImpl.java
  36. +20
    -3
      mallinkService/src/main/java/com/simple/service/impl/MallUserInfoServiceImpl.java
  37. +5
    -0
      mallinkService/src/main/java/com/simple/service/impl/WxCUserBasicInfoServiceImpl.java
  38. +180
    -40
      mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java
  39. +5
    -7
      mallinkService/src/main/java/com/simple/service/impl/WxCouponSendServiceImpl.java
  40. +40
    -4
      mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java
  41. +42
    -117
      mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java
  42. +19
    -2
      mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml
  43. +17
    -1
      mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml
  44. +1
    -1
      mallinkService/src/main/resources/mapper/WxMallMapper.xml

+ 1
- 0
mallinkAdmin/src/main/java/com/simple/UserApplication.java Просмотреть файл

@@ -15,6 +15,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
@MapperScan(basePackages = {"com.simple.mapper"})
@EnableSwagger2
@EnableEncryptableProperties

public class UserApplication {

public static void main(String[] args) {


+ 1
- 0
mallinkAdmin/src/main/java/com/simple/config/ShiroConfig.java Просмотреть файл

@@ -121,6 +121,7 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/wxMallApply/add","anon");
filterChainDefinitionMap.put("/wxMallApply/sendvalidationcode","anon");
filterChainDefinitionMap.put("/captcha.jpg", "anon");
filterChainDefinitionMap.put("/version", "anon");
// filterChainDefinitionMap.put("/role/**", "corsFilter,token");
filterChainDefinitionMap.put("/**", "corsFilter,token,authc");
// filterChainDefinitionMap.put("/**", "anon");


+ 2
- 1
mallinkAdmin/src/main/java/com/simple/controller/CouponInjectController.java Просмотреть файл

@@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo;
import com.simple.common.Result;
import com.simple.common.ResultData;
import com.simple.domain.po.CouponInject;
import com.simple.enums.EnumCouponInjectSendType;
import com.simple.service.CouponInjectService;
import com.simple.service.WxCUserTagsService;
import io.swagger.annotations.Api;
@@ -51,7 +52,7 @@ public class CouponInjectController extends BaseController {

couponInject.setTenantId(getUser().getTenantId());
couponInject.setMUserId(getUser().getId());
if (couponInject.getSendType() == 0) {
if (couponInject.getSendType() == EnumCouponInjectSendType.IMMEDIATE.getCode()) {
couponInject.setSendTime(new Date());
}
//Assert.notNull(couponInject.getName(), "角色名不能为空");


+ 14
- 7
mallinkAdmin/src/main/java/com/simple/controller/HomeController.java Просмотреть файл

@@ -21,6 +21,7 @@ import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

@@ -37,6 +38,8 @@ import java.io.IOException;
public class HomeController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Value("${version}")
private String version;

@Autowired
private Producer producer;
@@ -47,7 +50,7 @@ public class HomeController {
@Autowired
private MallRolePermissionService mallRolePermissionService;

@RequestMapping("/captcha.jpg")
@GetMapping("/captcha.jpg")
public void captcha(HttpServletResponse response)throws ServletException, IOException {
response.setHeader("Cache-Control", "no-store, no-cache");
response.setContentType("image/jpeg");
@@ -66,12 +69,10 @@ public class HomeController {

@ApiOperation("登录")
@PostMapping("/doLogin")
public ResultData login(@RequestBody MallUserInfo user, String captcha) {
if (captcha != null) {
String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY);
if(!captcha.equalsIgnoreCase(kaptcha)){
return new ResultData(ErrorCode.KAPCHA_NOT_EQUAL);
}
public ResultData login(@RequestBody MallUserInfo user) {
String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY);
if(!user.getCaptcha().equalsIgnoreCase(kaptcha)){
return new ResultData(ErrorCode.KAPCHA_NOT_EQUAL);
}

ResultData data = new ResultData();
@@ -125,4 +126,10 @@ public class HomeController {
SecurityUtils.getSubject().logout();
return data;
}

@ApiOperation("获取后端版本号")
@GetMapping("/version")
public ResultData version() {
return new ResultData(version);
}
}

+ 21
- 16
mallinkAdmin/src/main/java/com/simple/controller/MallUserInfoController.java Просмотреть файл

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

import com.github.pagehelper.PageInfo;
import com.simple.common.ErrorCode;
import com.simple.common.ResultData;
import com.simple.domain.po.*;
import com.simple.service.*;
@@ -78,8 +79,13 @@ public class MallUserInfoController extends BaseController {
@ApiOperation(value = "创建用户接口", response = String.class)
@PostMapping("add")
public ResultData createUser(@RequestBody MallUserInfo userInfo) {
Assert.notNull(userInfo.getUsername(), "用户名不能为空");
Assert.isTrue(checkUnique(userInfo.getUsername(), 0), "重复的用户名");

if(checkUniqueName(userInfo.getUsername(), null)){
return new ResultData(ErrorCode.USER_NAME_IS_FOUND,"用户名已存在");
}
if(checkUniquePhone(userInfo.getPhone(), null)){
return new ResultData(ErrorCode.USER_PHONE_IS_FOUND,"手机号已存在");
}
Assert.notNull(userInfo.getPassword(), "密码不能为空");
PasswordHelper passwordHelper = new PasswordHelper();
passwordHelper.encryptPassword(userInfo);
@@ -97,8 +103,13 @@ public class MallUserInfoController extends BaseController {
@ApiOperation(value = "修改用户接口", response = String.class)
@PostMapping("update")
public ResultData updateUser(@RequestBody MallUserInfo userInfo) {
Assert.notNull(userInfo.getUsername(), "用户名不能为空");
Assert.isTrue(checkUnique(userInfo.getUsername(), 1), "重复的用户名");
//Assert.notNull(userInfo.getUsername(), "用户名不能为空");
if(checkUniqueName(userInfo.getUsername(), userInfo.getId())){
return new ResultData(ErrorCode.USER_NAME_IS_FOUND,"用户名已存在");
}
if(checkUniquePhone(userInfo.getPhone(), userInfo.getId())){
return new ResultData(ErrorCode.USER_PHONE_IS_FOUND,"手机号已存在");
}
// Assert.notNull(userInfo.getPassword(), "密码不能为空");
// PasswordHelper passwordHelper = new PasswordHelper();
// passwordHelper.encryptPassword(userInfo);
@@ -155,18 +166,12 @@ public class MallUserInfoController extends BaseController {
return new ResultData();
}

private boolean checkUnique(String username, Integer type) {
if (type == 0) {
if (userInfoService.cntByUserName(username) > 0) {
return false;
}
}
if (type == 1) {
if (userInfoService.cntByUserName(username) > 1) {
return false;
}
}
return true;
private boolean checkUniqueName(String username, Long id) {
return userInfoService.cntByUserName(username,id);
}

private boolean checkUniquePhone(String phone, Long id) {
return userInfoService.cntByUserPhone(phone,id);
}




+ 2
- 2
mallinkAdmin/src/main/java/com/simple/controller/WxCarCallBackController.java Просмотреть файл

@@ -8,7 +8,7 @@ import com.simple.domain.po.WxCarCmdLog;
import com.simple.domain.po.WxPark;
import com.simple.enums.EnumCarCmd;
import com.simple.enums.EnumCarVendor;
import com.simple.enums.EnumCouponSendType;
import com.simple.enums.EnumCouponSendSendType;
import com.simple.enums.EnumETCPCode;
import com.simple.service.*;
import com.simple.utils.ETCPUtil;
@@ -109,7 +109,7 @@ public class WxCarCallBackController extends BaseController {
// TODO 可能多用户关联同一张车牌
List<WxCUserCar> userCarList = wxCUserCarService.getList(userCarQ);
for (WxCUserCar userCar : userCarList) {
wxCouponSendService.sendCouponToUser(tenantId, userCar.getCUserId(), EnumCouponSendType.CAR_STOP);
wxCouponSendService.sendCouponToUser(tenantId, userCar.getCUserId(), EnumCouponSendSendType.CAR_STOP);
}
}



+ 12
- 4
mallinkAdmin/src/main/java/com/simple/controller/WxCouponSendController.java Просмотреть файл

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

import com.github.pagehelper.PageInfo;
import com.simple.common.ErrorCode;
import com.simple.common.Result;
import com.simple.common.ResultData;
import com.simple.domain.po.WxCoupon;
import com.simple.domain.po.WxCouponSend;
import com.simple.enums.EnumCouponSendType;
import com.simple.enums.EnumCouponStatus;
import com.simple.service.WxCouponSendService;
import com.simple.service.WxCouponService;
import io.swagger.annotations.ApiImplicitParam;
@@ -43,19 +46,24 @@ public class WxCouponSendController extends BaseController {
@PostMapping("add")
public ResultData add(@RequestBody WxCouponSend wxCouponSend) {
if (null == wxCouponSend) {
return new ResultData(Result.ERROR, "参数不对");
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
}
wxCouponSend.setTenantId(getTenantId());
wxCouponSend.setStatus(0);
List<WxCouponSend> wxCouponSendList = wxCouponSendService.listAsPage(wxCouponSend, 1, 1).getList();
if (wxCouponSendList != null && wxCouponSendList.size() > 0) {
return new ResultData(Result.ERROR, "已经添加过该券");
return new ResultData(ErrorCode.COUPON_SEND_IS_EXISTED);
}
WxCoupon wxCoupon = wxCouponService.getById(wxCouponSend.getCouponId());
if (wxCoupon.getStatus() != 0 || wxCoupon.getSendType() != 2) {
return new ResultData(Result.ERROR, "该券的状态有问题");
if (wxCoupon.getStatus() != EnumCouponStatus.COUPON_STATUS_THROW_IN.getCode()){
return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF);
}

if (wxCoupon.getSendType() != EnumCouponSendType.PASSIVE.getCode()) {
return new ResultData(ErrorCode.COUPON_TYPE_IS_NOT_PASSIVE);
}


wxCouponSend.setMerchantId(wxCoupon.getMerchantId());
wxCouponSend.setType(wxCoupon.getType());
wxCouponSend.setTenantId(wxCoupon.getTenantId());


+ 0
- 10
mallinkAdmin/src/main/java/com/simple/controller/WxPayOrderController.java Просмотреть файл

@@ -75,14 +75,4 @@ public class WxPayOrderController extends BaseController {

@Autowired
private WxAppinfoService wxAppinfoService;

@ApiOperation("测试分账")
@GetMapping("/sharing")
public ResultData test() {
//xProfitSharingOrderService.test();
wxPayOrderService.sendPaySuccess();

return new ResultData();
}
}

+ 70
- 5
mallinkAdmin/src/main/java/com/simple/controller/WxUserStructureController.java Просмотреть файл

@@ -101,13 +101,17 @@ public class WxUserStructureController extends BaseController {
WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto();
dto.setTenantId(getTenantId());
dto.setStartTime(startTime);
dto.setEndTime(endTime);
if (endTime != null) {
Calendar c = Calendar.getInstance();
c.setTime(endTime);
c.add(Calendar.DAY_OF_YEAR, 1);
endTime = c.getTime();
}
long allCount = wxCUserService.findCount(dto);//总量
//微信用户数据
long wxallCount = wxCUserService.findCount(dto);//总量
//会员数据
Map<String,Object> member=getMemberData(dto);
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 0);
@@ -116,8 +120,8 @@ public class WxUserStructureController extends BaseController {
Date today = c.getTime();
dto.setStartTime(today);
dto.setEndTime(null);
long todayCount = wxCUserService.findCount(dto);//今天新增
List<UserStructureVo> newCountVos = new ArrayList<>();//每日新增会员数
long wxtodayCount = wxCUserService.findCount(dto);//今天新增
List<UserStructureVo> wxnewCountVos = new ArrayList<>();//每日新增会员数
int j = 1;
for (int i = 29; i >= 0; i--) {
c.clear();
@@ -132,6 +136,64 @@ public class WxUserStructureController extends BaseController {
j++;
vo.setName(new SimpleDateFormat("MM-dd").format(dto.getStartTime()));
vo.setCount(count);
wxnewCountVos.add(vo);
}
List<UserStructureVo> wxallCountVos = new ArrayList<>();//累计会员数
c.clear();
c.setTime(today);
c.add(Calendar.DAY_OF_YEAR, -30);
dto.setEndTime(c.getTime());
dto.setStartTime(null);
long firstDay = wxCUserService.findCount(dto);//统计的第一天总数
int i = 0;
long sumCount = 0;
for (UserStructureVo v : wxnewCountVos) {
UserStructureVo vo = new UserStructureVo();
sumCount += v.getCount();
vo.setCount(firstDay + sumCount);
vo.setName(v.getName());
vo.setSortNum(i + 1);
wxallCountVos.add(vo);
i++;
}
Map<String, Object> map = new HashMap<>();
map.put("wxallCount", wxallCount);//累计会员总数
map.put("wxtodayCount", wxtodayCount);//今日新增会员数
map.put("wxallCountVos", wxallCountVos);//累计会员列表( 日期和数量list)
map.put("wxnewCountVos", wxnewCountVos);//新增会员列表(日期和数量list)
map.putAll(member);
return new ResultData(map);
}
private Map<String,Object> getMemberData(WxCUserBasicInfoDto dto) {
long allCount = wxCUserBasicInfoService.findCount(dto);//总量
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
Date today = c.getTime();
dto.setStartTime(today);
dto.setEndTime(null);
long todayCount = wxCUserBasicInfoService.findCount(dto);//今天新增
List<UserStructureVo> newCountVos = new ArrayList<>();//每日新增会员数
int j = 1;
for (int i = 29; i >= 0; i--) {
c.clear();
c.setTime(today);
c.add(Calendar.DAY_OF_YEAR, -i);
dto.setStartTime(c.getTime());
c.add(Calendar.DAY_OF_YEAR, 1);
dto.setEndTime(c.getTime());
long count = wxCUserBasicInfoService.findCount(dto);
UserStructureVo vo = new UserStructureVo();
vo.setSortNum(j);
j++;
vo.setName(new SimpleDateFormat("MM-dd").format(dto.getStartTime()));
vo.setCount(count);
newCountVos.add(vo);
}
List<UserStructureVo> allCountVos = new ArrayList<>();//累计会员数
@@ -140,7 +202,7 @@ public class WxUserStructureController extends BaseController {
c.add(Calendar.DAY_OF_YEAR, -30);
dto.setEndTime(c.getTime());
dto.setStartTime(null);
long firstDay = wxCUserService.findCount(dto);//统计的第一天总数
long firstDay = wxCUserBasicInfoService.findCount(dto);//统计的第一天总数
int i = 0;
long sumCount = 0;
for (UserStructureVo v : newCountVos) {
@@ -152,12 +214,15 @@ public class WxUserStructureController extends BaseController {
allCountVos.add(vo);
i++;
}
Map<String, Object> map = new HashMap<>();
map.put("allCount", allCount);//累计会员总数
map.put("todayCount", todayCount);//今日新增会员数
map.put("allCountVos", allCountVos);//累计会员列表( 日期和数量list)
map.put("newCountVos", newCountVos);//新增会员列表(日期和数量list)
return new ResultData(map);
return map;
}
@ApiOperation("拓客分析")


+ 20
- 8
mallinkAdmin/src/main/java/com/simple/schedule/OrderExpiringSchedule.java Просмотреть файл

@@ -3,6 +3,7 @@ package com.simple.schedule;
import com.simple.domain.po.WxOrder;
import com.simple.enums.EnumOrderStatus;
import com.simple.mapper.WxOrderMapper;
import com.simple.service.WxOrderService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
@@ -25,7 +26,10 @@ public class OrderExpiringSchedule {
@Autowired
WxOrderMapper wxOrderMapper;

@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
@Autowired
WxOrderService wxOrderService;


@Scheduled(cron = "0 */5 * * * *?") // 每5分钟检查一次
//@Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次
public void orderExpireSchedule() {
@@ -38,13 +42,21 @@ public class OrderExpiringSchedule {
List<WxOrder> wxOrderList = wxOrderMapper.findListOfUnpaidOrderByDate(dateMap);

for(WxOrder wxOrder: wxOrderList){
wxOrder.setUpdateDate(new Date());
wxOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode());
wxOrderMapper.updateByPrimaryKeySelective(wxOrder);

logger.info("\nFound " + wxOrder.getId() + "\n"
+ " create at " + wxOrder.getCreateDate() +"\n"
+ " expired at " + new Date());
orderExpired(wxOrder);
}
}

@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void orderExpired(WxOrder order) {
order.setUpdateDate(new Date());
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode());
wxOrderMapper.updateByPrimaryKeySelective(order);

// 微信 关单
wxOrderService.orderClose(order);

logger.info("\nFound " + order.getId() + "\n"
+ " create at " + order.getCreateDate() +"\n"
+ " expired at " + new Date());
}
}

+ 1
- 0
mallinkAdmin/src/main/resources/application.yml Просмотреть файл

@@ -51,3 +51,4 @@ jasypt:
encryptor:
password: oRqdnDbK5pj3eMmB

version: @project.version@

+ 9
- 0
mallinkBApi/src/main/java/com/simple/controller/WxCouponOrderController.java Просмотреть файл

@@ -147,6 +147,15 @@ public class WxCouponOrderController extends BaseController {
}
}

// 核销发模板消息
if (couponOrder != null) {
try {
wxCouponOrderService.sendVerifyMsg(couponOrder, getUser());
} catch (Exception e) {
logger.error(e.getMessage());
}
}

return new ResultData(couponOrder);
}



+ 10
- 1
mallinkBApi/src/main/java/com/simple/controller/WxMallController.java Просмотреть файл

@@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@@ -32,6 +33,9 @@ import java.util.Map;
public class WxMallController extends BaseController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Value("${version}")
private String version;

@Autowired
private WxMallService wxMallService;

@@ -73,7 +77,12 @@ public class WxMallController extends BaseController {
return new ResultData(Result.SUCCESS, "查询成功", mall);
}


@AuthIgnore
@ApiOperation("获取后端版本号")
@GetMapping("/version")
public ResultData version() {
return new ResultData(version);
}
/**
* 微信消息服务验证
* @param response


+ 3
- 1
mallinkBApi/src/main/resources/application.yml Просмотреть файл

@@ -43,4 +43,6 @@ pay:

jasypt:
encryptor:
password: oRqdnDbK5pj3eMmB
password: oRqdnDbK5pj3eMmB

version: @project.version@

+ 11
- 0
mallinkCApi/src/main/java/com/simple/controller/WxMallController.java Просмотреть файл

@@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -27,6 +28,9 @@ import java.util.Map;
public class WxMallController extends BaseController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Value("${version}")
private String version;

@Autowired
private WxMallService wxMallService;

@@ -68,5 +72,12 @@ public class WxMallController extends BaseController {
return new ResultData(Result.SUCCESS, "查询成功", mall);
}

@AuthIgnore
@ApiOperation("获取后端版本号")
@GetMapping("/version")
public ResultData version() {
return new ResultData(version);
}


}

+ 3
- 1
mallinkCApi/src/main/resources/application.yml Просмотреть файл

@@ -43,4 +43,6 @@ pay:

jasypt:
encryptor:
password: oRqdnDbK5pj3eMmB
password: oRqdnDbK5pj3eMmB

version: @project.version@

+ 13
- 3
mallinkService/src/main/java/com/simple/common/ErrorCode.java Просмотреть файл

@@ -56,6 +56,8 @@ public enum ErrorCode{
BUSER_NOT_IN_APP(2005, "用户不是此app用户"),
KAPCHA_NOT_VALID(2006, "验证码已失效"),
KAPCHA_NOT_EQUAL(2007, "验证码不正确"),
USER_NAME_IS_FOUND(2008,"用户名已存在"),
USER_PHONE_IS_FOUND(2009,"手机号已存在"),

/**
* 商场/商户
@@ -69,11 +71,19 @@ public enum ErrorCode{
/**
* 券
*/
COUPON_IS_EMPTY(2020, "券不存在"),
COUPON_IS_NOT_FREE(2021, "券不免费"),
COUPON_IS_EMPTY(2020, "券不存在"),
COUPON_IS_NOT_FREE(2021, "券不免费"),
COUPON_IS_TAKE_OFF(2022, "此券已下架"),
COUPON_IS_EXPIRED(2023, "此券已过期"),
COUPON_IS_SELL_OUT(2024, "此券已售罄"),

COUPON_TYPE_IS_NOT_ACTIVE(2025, "此券不能用于主动领取"),
COUPON_TYPE_IS_NOT_PASSIVE(2026, "此券不能用于定向投放"),
COUPON_CHANNEL_IS_EXISTED(2027, "此券已投放过"),

COUPON_SEND_IS_EXISTED(2028, "此券已经添加到该渠道"),

COUPON_CHANNEL_IS_EXISTED(2023, "券已投放过"),
/**
* 车流 2040
*/


+ 19
- 1
mallinkService/src/main/java/com/simple/domain/po/MallUserInfo.java Просмотреть файл

@@ -67,7 +67,10 @@ public class MallUserInfo implements Serializable {
private Integer isAdmin;
@io.swagger.annotations.ApiModelProperty(value="昵称",name="nickName")
private String nickName;

@io.swagger.annotations.ApiModelProperty(value="手机",name="phone")
private String phone;

@Transient
private Long roleId;
@@ -82,6 +85,9 @@ public class MallUserInfo implements Serializable {
//拥有的菜单权限
@Transient
private String menus;

@Transient
private String captcha;
public String getMenus() {
return menus;
@@ -179,9 +185,21 @@ public class MallUserInfo implements Serializable {
this.roleId = roleId;
}

public String getCaptcha() {
return captcha;
}

public void setCaptcha(String captcha) {
this.captcha = captcha;
}

public String getPhone() {
return phone;
}

public void setPhone(String phone) {
this.phone = phone;
}

public static enum Field
{


+ 12
- 11
mallinkService/src/main/java/com/simple/domain/po/WxTemplateMsg.java Просмотреть файл

@@ -41,20 +41,19 @@ public class WxTemplateMsg implements Serializable {
}
/*租户ID**/
/**租户ID**/
@io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId")
private String tenantId;
/*模板ID**/
/**模板ID**/
@io.swagger.annotations.ApiModelProperty(value="模板ID",name="templateId")
private String templateId;
/*模板类型1:支付成功消息2:退款申请成功消息**/
@io.swagger.annotations.ApiModelProperty(value="模板类型1:支付成功消息2:退款申请成功消息",name="type")
/**模板类型1:核销成功消息, 2:核销失败消息**/
@io.swagger.annotations.ApiModelProperty(value="模板类型1:核销成功消息,2:核销失败消息",name="type")
private Integer type;
/*创建时间**/
/**创建时间**/
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate")
private Date createDate;
/*更新时间**/
/**更新时间**/
@io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate")
private Date updateDate;
public String getTenantId() {
@@ -93,11 +92,11 @@ public class WxTemplateMsg implements Serializable {
public static enum Field
{
Id_ASC("`id` ASC"),Id_DESC("`id` DESC")
,TenantId_ASC("`tenantId` ASC"),TenantId_DESC("`tenantId` DESC")
,TemplateId_ASC("`templateId` ASC"),TemplateId_DESC("`templateId` DESC")
,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC")
,TemplateId_ASC("`template_id` ASC"),TemplateId_DESC("`template_id` DESC")
,Type_ASC("`type` ASC"),Type_DESC("`type` DESC")
,CreateDate_ASC("`createDate` ASC"),CreateDate_DESC("`createDate` DESC")
,UpdateDate_ASC("`updateDate` ASC"),UpdateDate_DESC("`updateDate` DESC")
,CreateDate_ASC("`create_date` ASC"),CreateDate_DESC("`create_date` DESC")
,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC")
;
private String value;
Field(String value){
@@ -130,6 +129,8 @@ public class WxTemplateMsg implements Serializable {
sb.append(",");
sb.append(fields[k].toString());
}

this.sortColumns = sb.toString();
}


+ 37
- 0
mallinkService/src/main/java/com/simple/enums/EnumCouponInjectSendType.java Просмотреть файл

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

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

// 0:立即发送 1:定时发送
IMMEDIATE(0, "立即发送"),
TIMING(1, "定时发送")
;

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

private Integer code;
private String message;

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

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 37
- 0
mallinkService/src/main/java/com/simple/enums/EnumCouponSendSendType.java Просмотреть файл

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

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

// 2:停车发券 3:核销发券
CAR_STOP(2, "停车发券"),
COUPON_VERIFY(3, "核销发券")
;

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

private Integer code;
private String message;

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

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 37
- 0
mallinkService/src/main/java/com/simple/enums/EnumCouponSendStatus.java Просмотреть файл

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

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

// 0:有效 1:无效
VALID(0,"有效"),
INVALID(1, "无效")
;

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

private Integer code;
private String message;

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

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 3
- 3
mallinkService/src/main/java/com/simple/enums/EnumCouponSendType.java Просмотреть файл

@@ -5,9 +5,9 @@ package com.simple.enums;
*/
public enum EnumCouponSendType {

// 2:停车发券 3:核销发券
CAR_STOP(2, "停车发券"),
COUPON_VERIFY(3, "核销发券")
// 1:主动领取 2:定向投放
ACTIVE(1,"主动领取"),
PASSIVE(2, "定向投放")
;

public static EnumCouponSendType getEnum(Integer code) {


+ 38
- 0
mallinkService/src/main/java/com/simple/enums/EnumCouponValidType.java Просмотреть файл

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

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

// 1-时间范围 ;2-领取后时长;

BETWEEN_TWO_TIME(1, "时间范围"),
DAYS_AFTER_RECEIVING(2, "领取后天数"),
;

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

private Integer code;
private String message;

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

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 3
- 4
mallinkService/src/main/java/com/simple/enums/EnumTemplateType.java Просмотреть файл

@@ -5,11 +5,10 @@ package com.simple.enums;
*/
public enum EnumTemplateType {

// 1-支付成功消息, 2-支付失败消息 3-退款消息
// 1-核销成功消息, 2-核销失败消息

PAY_SUCCESS(1, "订单支付成功通知"),
PAY_FAIL(2, "支付失败通知"),
REFUND(3, "退款通知")
VERIFY_SUCCESS(1, "核销成功消息"),
VERIFY_FAIL(2, "核销失败消息")
;

public static EnumTemplateType getEnum(Integer code) {


+ 5
- 2
mallinkService/src/main/java/com/simple/mapper/MallUserInfoMapper.java Просмотреть файл

@@ -5,6 +5,7 @@ import com.simple.domain.po.MallUserInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface MallUserInfoMapper extends CommonMapper<MallUserInfo, String> {

@@ -14,6 +15,8 @@ public interface MallUserInfoMapper extends CommonMapper<MallUserInfo, String> {

Integer hasButtonPermission(@Param("userId") Long userId, @Param("permission") String permission);


long cntByUserName(Map<String,Object> params);

}

+ 2
- 1
mallinkService/src/main/java/com/simple/mapper/WxCUserBasicInfoMapper.java Просмотреть файл

@@ -6,7 +6,6 @@ import com.simple.domain.po.WxCUserBasicInfo;
import com.simple.domain.vo.CUserBaseVo;

import java.util.List;
import java.util.Map;

public interface WxCUserBasicInfoMapper extends CommonMapper<WxCUserBasicInfo, String> {

@@ -20,4 +19,6 @@ public interface WxCUserBasicInfoMapper extends CommonMapper<WxCUserBasicInfo, S
long findCountByAge(WxCUserBasicInfoDto dto);

long findCount(WxCUserBasicInfoDto dto);

}

+ 6
- 3
mallinkService/src/main/java/com/simple/service/MallUserInfoService.java Просмотреть файл

@@ -67,7 +67,10 @@ public interface MallUserInfoService {
* @return 是否有权限(true: 有| false: 没有)
*/
boolean hasButtonPermission(Long userId, String permission);


boolean cntByUserName(String username, Long id);

boolean cntByUserPhone(String phone, Long id);

}

+ 2
- 1
mallinkService/src/main/java/com/simple/service/WxCUserBasicInfoService.java Просмотреть файл

@@ -9,7 +9,6 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

public interface WxCUserBasicInfoService {

@@ -83,4 +82,6 @@ public interface WxCUserBasicInfoService {

ResultData importTemplate(MultipartFile file, String tenantId);

long findCount(WxCUserBasicInfoDto dto);

}

+ 8
- 0
mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java Просмотреть файл

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

import com.github.pagehelper.PageInfo;
import com.simple.common.ResultData;
import com.simple.domain.po.WxAppinfo;
import com.simple.domain.po.WxCouponOrder;
import com.simple.domain.po.WxMerchantBUser;
import com.simple.domain.po.WxOrder;
@@ -78,6 +79,13 @@ public interface WxCouponOrderService {
*/
void shareAfterVerify(WxCouponOrder couponOrder);

/**
* 核销模板消息
* @param couponOrder
* @param bUser
*/
void sendVerifyMsg(WxCouponOrder couponOrder, WxMerchantBUser bUser);

/**
* 根据日期 b用户查券list
*


+ 2
- 3
mallinkService/src/main/java/com/simple/service/WxCouponSendService.java Просмотреть файл

@@ -1,9 +1,8 @@
package com.simple.service;

import java.util.*;
import com.github.pagehelper.PageInfo;
import com.simple.domain.po.WxCouponSend;
import com.simple.enums.EnumCouponSendType;
import com.simple.enums.EnumCouponSendSendType;

public interface WxCouponSendService {

@@ -45,7 +44,7 @@ public interface WxCouponSendService {
* @param cUserId
* @param type 2:停车发券 3:核销发券
*/
void sendCouponToUser(String tenantId, Long cUserId, EnumCouponSendType type);
void sendCouponToUser(String tenantId, Long cUserId, EnumCouponSendSendType type);

void updateStatusByCouponId(Long couponId,String tenantId,int status);


+ 8
- 2
mallinkService/src/main/java/com/simple/service/WxOrderService.java Просмотреть файл

@@ -4,6 +4,7 @@ import java.util.*;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.simple.common.ResultData;
import com.simple.domain.po.WxCUser;
import com.simple.domain.po.WxCouponOrder;
import com.simple.domain.po.WxOrder;
@@ -60,8 +61,13 @@ public interface WxOrderService {
* @param enumOrderStatus
*/
int updateOrderStatus(WxOrder updateOrder, EnumOrderStatus enumOrderStatus);
/**

/**
* 订单关单
*/
ResultData orderClose(WxOrder order);

/**
* 根据Id获得实体
*
* @param id


+ 0
- 2
mallinkService/src/main/java/com/simple/service/WxPayOrderService.java Просмотреть файл

@@ -109,7 +109,5 @@ public interface WxPayOrderService {
*/
void deleteById(Long id);

void sendPaySuccess();


}

+ 15
- 7
mallinkService/src/main/java/com/simple/service/impl/CouponInjectServiceImpl.java Просмотреть файл

@@ -3,10 +3,14 @@ package com.simple.service.impl;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.simple.common.ErrorCode;
import com.simple.common.IdWorker;
import com.simple.common.Result;
import com.simple.common.ResultData;
import com.simple.domain.po.*;
import com.simple.enums.EnumCouponSendType;
import com.simple.enums.EnumCouponStatus;
import com.simple.enums.EnumCouponValidType;
import com.simple.mapper.CouponInjectMapper;
import com.simple.service.*;
import org.apache.commons.lang.time.DateUtils;
@@ -65,17 +69,21 @@ public class CouponInjectServiceImpl implements CouponInjectService {

@Override
public ResultData add(CouponInject record) {
ResultData resultData = new ResultData();
WxCoupon wxCoupon = wxCouponService.getById(record.getCouponId());
if (wxCoupon.getValidType() == 1) { //时间范围
if (wxCoupon.getValidType() == EnumCouponValidType.BETWEEN_TWO_TIME.getCode()) { //时间范围
if (new Date().after(wxCoupon.getValidEndDate())) {
return new ResultData(Result.ERROR,"已过期");
return new ResultData(ErrorCode.COUPON_IS_EXPIRED);
}
}
if(wxCoupon.getStatus()!=0||wxCoupon.getSendType()!=1){
return new ResultData(Result.ERROR,"券状态有问题,不能投放");
if(wxCoupon.getStatus() != EnumCouponStatus.COUPON_STATUS_THROW_IN.getCode()){
return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF);
}
if(wxCoupon.getSendType()!=EnumCouponSendType.PASSIVE.getCode()) {
return new ResultData(ErrorCode.COUPON_TYPE_IS_NOT_PASSIVE);
}


//解析前台tags,并转换json
String[] arys = record.getTags().split(",");
List<Long> tagids = new ArrayList<>();
@@ -99,7 +107,7 @@ public class CouponInjectServiceImpl implements CouponInjectService {
}
int inventory = wxCoupon.getRemainInventory();//库存数量
if(cUsers.size()>inventory){
return new ResultData(Result.ERROR,"库存不足");
return new ResultData(ErrorCode.COUPON_IS_SELL_OUT);
}
record.setCouponName(wxCoupon.getTitle());
record.setSendAmount(cUsers.size());
@@ -131,7 +139,7 @@ public class CouponInjectServiceImpl implements CouponInjectService {
wxCouponOrder.setCUserId(tempCUser.getId());
wxCouponOrder.setCouponPrice(0);
wxCouponOrder.setCreateDate(new Date());
if (wxCoupon.getValidType() == 1) { //时间范围区间
if (wxCoupon.getValidType() == EnumCouponValidType.BETWEEN_TWO_TIME.getCode()) { //时间范围区间
wxCouponOrder.setExpiredTime(wxCoupon.getValidEndDate());
} else {
Date date = DateUtils.addDays(new Date(), wxCoupon.getValidDays());


+ 3
- 4
mallinkService/src/main/java/com/simple/service/impl/DataTowerServiceImpl.java Просмотреть файл

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

import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonObject;
import com.simple.domain.po.WxMall;
import com.simple.domain.po.WxMerchant;
import com.simple.domain.po.WxMerchantTradeDaily;
@@ -13,12 +12,10 @@ import com.simple.utils.DateUtils;
import com.simple.utils.HashUtil;
import com.simple.utils.HttpUtil;
import org.apache.log4j.Logger;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.shiro.codec.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -269,11 +266,13 @@ public class DataTowerServiceImpl implements DataTowerService {
Map<String,String> params=new HashMap<>();
params.put("username",username);
params.put("authVal",authVal);
String token = HttpUtil.doPost(wxMall.getWiwideUrl(), params);
String wiwideUrl = wxMall.getWiwideUrl();
String token = HttpUtil.doPost(wiwideUrl+"/login/auth", params);


Map<String, Object> datamap = new HashMap<>();
datamap.put("token",JSONObject.parseObject(token).get("data"));
datamap.put("url",wiwideUrl);

return datamap;
}


+ 20
- 3
mallinkService/src/main/java/com/simple/service/impl/MallUserInfoServiceImpl.java Просмотреть файл

@@ -12,6 +12,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.Map;

@Service
public class MallUserInfoServiceImpl implements MallUserInfoService {
@@ -79,7 +82,21 @@ public class MallUserInfoServiceImpl implements MallUserInfoService {
public boolean hasButtonPermission(Long userId, String permission) {
return mallUserInfoMapper.hasButtonPermission(userId, permission) == null ? false : true;
}

@Override
public boolean cntByUserName(String username, Long id) {
Map<String,Object> params=new HashMap<>();
params.put("username",username);
params.put("id",id);
return mallUserInfoMapper.cntByUserName(params)>0?true:false;
}

@Override
public boolean cntByUserPhone(String phone, Long id) {
Map<String,Object> params=new HashMap<>();
params.put("phone",phone);
params.put("id",id);
return mallUserInfoMapper.cntByUserName(params)>0?true:false;
}

}

+ 5
- 0
mallinkService/src/main/java/com/simple/service/impl/WxCUserBasicInfoServiceImpl.java Просмотреть файл

@@ -336,5 +336,10 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService {
return new ResultData(Result.SUCCESS, "导入成功");
}

@Override
public long findCount(WxCUserBasicInfoDto dto) {
return wxCUserBasicInfoMapper.findCount(dto);
}


}

+ 180
- 40
mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java Просмотреть файл

@@ -3,8 +3,11 @@ package com.simple.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.simple.common.ErrorCode;
import com.simple.common.IdWorker;
import com.simple.common.ResultData;
@@ -13,15 +16,13 @@ import com.simple.domain.vo.CUserDateAmountVo;
import com.simple.domain.vo.WxCouponOrderBVo;
import com.simple.domain.vo.WxCouponOrderCVo;
import com.simple.domain.vo.WxCouponOrderCarCVo;
import com.simple.enums.EnumCouponOrderStatus;
import com.simple.enums.EnumCouponSendType;
import com.simple.enums.EnumPayShare;
import com.simple.enums.EnumPayStatus;
import com.simple.enums.*;
import com.simple.exception.MallinkException;
import com.simple.mapper.*;
import com.simple.service.*;
import com.simple.utils.DataUtil;
import com.simple.utils.DateUtils;
import com.simple.utils.MaUtil;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.log4j.Logger;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
@@ -40,7 +41,7 @@ import java.util.*;
public class WxCouponOrderServiceImpl implements WxCouponOrderService {
private Logger logger = Logger.getLogger(WxCouponOrderServiceImpl.class);

@Autowired
@Autowired
WxCouponOrderMapper wxCouponOrderMapper;

@Autowired
@@ -70,6 +71,15 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
@Autowired
WxMallMapper wxMallMapper;

@Autowired
WxTemplateMsgMapper wxTemplateMsgMapper;

@Autowired
WxCouponMapper wxCouponMapper;

@Autowired
WxAppinfoService wxAppinfoService;


@Override
public PageInfo<WxCouponOrder> listAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize) {
@@ -86,7 +96,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
if (record.getId() == null) {
//record.setId(UUID.randomUUID().toString().replaceAll("-", ""));
final IdWorker idWorker = IdWorker.get();
record.setId(idWorker.nextId());
record.setId(idWorker.nextId());
wxCouponOrderMapper.insertSelective(record);
} else {
wxCouponOrderMapper.updateByPrimaryKeySelective(record);
@@ -135,8 +145,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
} catch (ParseException e) {
return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR);
}
}
else {
} else {
try {
startDate = fmt.parse(date);
} catch (ParseException e) {
@@ -144,7 +153,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
}
Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
cal.add(Calendar.DATE,1);
cal.add(Calendar.DATE, 1);
endDate = cal.getTime();
}

@@ -157,7 +166,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {

if (pageIndex == null || pageSize == null) {
List<WxCouponOrder> list;
if(isVerified)
if (isVerified)
list = wxCouponOrderMapper.findListOfVerifiedByDate(dateMap);
else
list = wxCouponOrderMapper.findListOfOrderedByDate(dateMap);
@@ -167,8 +176,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
total_price = total_price + couponOrder.getCouponPrice();
}
resultMap.put("amount", total_price);
}
else {
} else {
if (isVerified)
resultMap.put("list", PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findListOfVerifiedByDateForBUser(dateMap)));
else
@@ -196,8 +204,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
@Override
public ResultData detailCUserVo(Long cUserId, String couponOrderId) {
WxCUser wxCuser = wxCUserMapper.selectByPrimaryKey(cUserId);
if(wxCuser == null){
logger.error("用户不存在:"+ cUserId);
if (wxCuser == null) {
logger.error("用户不存在:" + cUserId);
throw new MallinkException(ErrorCode.USER_IS_EMPTY);
}

@@ -215,8 +223,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
@Override
public ResultData detailBUserVo(Long bUserId, String couponOrderId) {
WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bUserId);
if(wxMerchantBUser == null){
logger.error("用户不存在:"+ bUserId);
if (wxMerchantBUser == null) {
logger.error("用户不存在:" + bUserId);
throw new MallinkException(ErrorCode.USER_IS_EMPTY);
}

@@ -250,21 +258,21 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
WxMall wxMall = new WxMall();
wxMall.setTenantId(tenantId);
wxMall = wxMallMapper.findList(wxMall).get(0);
String filepath="./uploads/";
String filepath = "./uploads/";
File savefile = new File(filepath);
if (!savefile.exists()) {
savefile.mkdirs();
}

Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("","",ExcelType.XSSF), WxCouponOrderBVo.class, list);
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("", "", ExcelType.XSSF), WxCouponOrderBVo.class, list);
FileOutputStream fos = null;
try {
String filename=wxMall.getName()+ DateUtils.getSystemTime("yyyyMMDDHHmmss") +".xlsx";
filepath=filepath+filename;
String filename = wxMall.getName() + DateUtils.getSystemTime("yyyyMMDDHHmmss") + ".xlsx";
filepath = filepath + filename;
fos = new FileOutputStream(filepath);
workbook.write(fos);
fos.close();
downFile(filepath,filename,response,request);
downFile(filepath, filename, response, request);
} catch (Exception e) {
e.printStackTrace();
}
@@ -273,8 +281,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
}


public void downFile(String filePath,String filename, HttpServletResponse response,
HttpServletRequest req) throws IOException {
public void downFile(String filePath, String filename, HttpServletResponse response,
HttpServletRequest req) throws IOException {
try {
response.reset();
response.setContentType("bin");
@@ -308,21 +316,21 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
public WxCouponOrder verify(Long couponOrderId, Long bUserId) {

WxCouponOrder wxCouponOrder = wxCouponOrderMapper.selectByPrimaryKey(couponOrderId);
if(wxCouponOrder == null){
logger.error("券ID不存在:"+ couponOrderId);
if (wxCouponOrder == null) {
logger.error("券ID不存在:" + couponOrderId);
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL);
}

WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bUserId.longValue());
if(wxMerchantBUser == null){
logger.error("核销员ID不存在:"+ bUserId);
WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bUserId.longValue());
if (wxMerchantBUser == null) {
logger.error("核销员ID不存在:" + bUserId);
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL);
}

WxOrder wxOrder = wxOrderMapper.selectByPrimaryKey(wxCouponOrder.getOrderId());

if (!wxOrder.getMerchantId().equals(wxMerchantBUser.getMerchantId())){
logger.error("券: couponMerchantId-" + wxOrder.getMerchantId()+"核销: couponMerchantId-"+wxMerchantBUser.getMerchantId());
if (!wxOrder.getMerchantId().equals(wxMerchantBUser.getMerchantId())) {
logger.error("券: couponMerchantId-" + wxOrder.getMerchantId() + "核销: couponMerchantId-" + wxMerchantBUser.getMerchantId());
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL);
}
if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) {
@@ -374,23 +382,155 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
WxOrder wxOrder = wxOrderMapper.selectByPrimaryKey(couponOrder.getOrderId());
if (wxOrder != null) {
try {
wxCouponSendService.sendCouponToUser(bUser.getTenantId(), wxOrder.getCUserId(), EnumCouponSendType.COUPON_VERIFY);
wxCouponSendService.sendCouponToUser(bUser.getTenantId(), wxOrder.getCUserId(), EnumCouponSendSendType.COUPON_VERIFY);
} catch (Exception e) {
logger.error("核销发券: " + e.getMessage());
}
}
}

/**
* 微信模板消息
*
* @param couponOrder, bUser
*/
@Override
public void sendVerifyMsg(WxCouponOrder couponOrder, WxMerchantBUser bUser) {
// 1. get order info
WxOrder order = wxOrderMapper.selectByPrimaryKey(couponOrder.getOrderId());
if (order == null) {
logger.error("找不到订单信息");
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND);
}
// 2. get coupon info
WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(couponOrder.getCouponId());
if (coupon == null) {
logger.error("找不到券信息");
throw new MallinkException(ErrorCode.COUPON_IS_EMPTY);
}
// 3. merchant info
WxMerchant merchant = wxMerchantMapper.selectByPrimaryKey(bUser.getMerchantId());
if (merchant == null) {
logger.error("找不到商户信息");
throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND);
}
// 4. get user info
WxCUser user = wxCUserMapper.selectByPrimaryKey(order.getCUserId());
if (user == null) {
logger.error("找不到C端用户");
throw new MallinkException(ErrorCode.USER_IS_EMPTY);
}

// 5. get app info
WxAppinfo appInfo = wxAppinfoService.getByAppId(user.getAppId());

// 6. get payOrder info
WxPayOrder payOrder = null;
WxPayOrder payOrderQ = new WxPayOrder();
payOrderQ.setTenantId(couponOrder.getTenantId());
payOrderQ.setOrderId(order.getId());
payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_WAY_SUCCESS.getCode());
List<WxPayOrder> payList = wxPayOrderMapper.select(payOrderQ);
if (payList.size() > 0) {
payOrder = payList.get(0);
}

WxMaService wxMaService = MaUtil.getWeappService(appInfo);

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String couponDetail = "";
if (coupon.getType() == EnumCouponType.COUPON_MANJIAN.getCode()) {
couponDetail = "满" + coupon.getUsePriceStr() + "减" + coupon.getPriceStr();
}

@Override
public List<CUserDateAmountVo> queryPriceTotalGroup(String tenantId, Date startTime, Date endTime) {
return wxCouponOrderMapper.queryPriceTotalGroup(tenantId, startTime, endTime);
}
WxTemplateMsg msg = null;
WxMaTemplateMessage templateMessage = null;
if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) {
WxTemplateMsg msgQ = new WxTemplateMsg();
msgQ.setTenantId(couponOrder.getTenantId());
msgQ.setType(EnumTemplateType.VERIFY_SUCCESS.getCode());
List<WxTemplateMsg> list = wxTemplateMsgMapper.select(msgQ);
if (list.size() > 0) {
msg = list.get(0);
}
if (msg == null) {
logger.error("找不到模板Id");
throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND);
}
/**
* 核销成功
* 核销金额 {{keyword1.DATA}}
* 商家名称 {{keyword2.DATA}}
* 商品 {{keyword3.DATA}}
* 核销时间 {{keyword4.DATA}}
* 商品描述 {{keyword5.DATA}}
*/
templateMessage = WxMaTemplateMessage.builder()
.toUser(user.getOpenId())
.formId(payOrder.getPrepayId()) // 微信支付的formId是prepayId
.page("pages/index/index")
.data(Lists.newArrayList(
new WxMaTemplateMessage.Data("keyword1", String.valueOf(coupon.getPrice() * 1.0 / 100) + "元", "#173177"),
new WxMaTemplateMessage.Data("keyword2", merchant.getName(), "#173177"),
new WxMaTemplateMessage.Data("keyword3", coupon.getTitle(), "#173177"),
new WxMaTemplateMessage.Data("keyword4", dateFormat.format(new Date()), "#173177"),
new WxMaTemplateMessage.Data("keyword5", couponDetail, "#173177"))
)
.templateId(msg.getTemplateId())
.emphasisKeyword("keyword1.DATA")
.build();
} else {
WxTemplateMsg msgQ = new WxTemplateMsg();
msgQ.setTenantId(couponOrder.getTenantId());
msgQ.setType(EnumTemplateType.VERIFY_FAIL.getCode());
List<WxTemplateMsg> list = wxTemplateMsgMapper.select(msgQ);
if (list.size() > 0) {
msg = list.get(0);
}
if (msg == null) {
logger.error("找不到模板Id");
throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND);
}
/**
* 核销失败
* 商品名称 {{keyword1.DATA}}
* 核销时间 {{keyword2.DATA}}
* 失败原因 {{keyword3.DATA}}
* 备注 {{keyword4.DATA}}
*/
templateMessage = WxMaTemplateMessage.builder()
.toUser(user.getOpenId())
.formId(payOrder.getPrepayId()) // 微信支付的formId是prepayId
.page("pages/index/index")
.data(Lists.newArrayList(
new WxMaTemplateMessage.Data("keyword1", coupon.getTitle(), "#173177"),
new WxMaTemplateMessage.Data("keyword2", dateFormat.format(new Date()), "#173177"),
new WxMaTemplateMessage.Data("keyword3", "未知"),
new WxMaTemplateMessage.Data("keyword4", couponDetail))
)
.templateId(msg.getTemplateId())
.emphasisKeyword("keyword1.DATA")
.build();
}

@Override
public int queryPriceTotal(String tenantId, Date startTime, Date endTime) {
return wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime);
}
//templateMessage.addData( new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177"));
try {
wxMaService.getMsgService().sendTemplateMsg(templateMessage);
} catch (WxErrorException e) {
logger.error("支付通知发送失败: " + e.getMessage());
throw new MallinkException(ErrorCode.TEMPLATE_SEND_FAILED);
}
}


@Override
public List<CUserDateAmountVo> queryPriceTotalGroup(String tenantId, Date startTime, Date endTime) {
return wxCouponOrderMapper.queryPriceTotalGroup(tenantId, startTime, endTime);
}

@Override
public int queryPriceTotal(String tenantId, Date startTime, Date endTime) {
return wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime);
}

}

+ 5
- 7
mallinkService/src/main/java/com/simple/service/impl/WxCouponSendServiceImpl.java Просмотреть файл

@@ -8,12 +8,10 @@ import com.simple.enums.*;
import com.simple.mapper.WxCouponOrderMapper;
import com.simple.mapper.WxCouponSendMapper;
import com.simple.service.*;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

@Service
@@ -66,22 +64,22 @@ public class WxCouponSendServiceImpl implements WxCouponSendService {

@Override
@Transactional
public void sendCouponToUser(String tenantId, Long cUserId, EnumCouponSendType type) {
public void sendCouponToUser(String tenantId, Long cUserId, EnumCouponSendSendType type) {
//查询开关是否打开
//查询停车或者核销的券 stopCarCouponSwitch verifyConponSwitch
WxCouponSend wxCouponSendQuery = new WxCouponSend();
wxCouponSendQuery.setTenantId(tenantId);
int actionLogType = 0;
String configKey = "";
if (type == EnumCouponSendType.CAR_STOP) {
if (type == EnumCouponSendSendType.CAR_STOP) {
//停车
wxCouponSendQuery.setSendType(EnumCouponSendType.CAR_STOP.getCode());
wxCouponSendQuery.setSendType(EnumCouponSendSendType.CAR_STOP.getCode());
actionLogType = EnumCouponActionChannelType.CAR.getCode();
configKey = "stopCarCouponSwitch";
}
if (type == EnumCouponSendType.COUPON_VERIFY) {
if (type == EnumCouponSendSendType.COUPON_VERIFY) {
//核销
wxCouponSendQuery.setSendType(EnumCouponSendType.COUPON_VERIFY.getCode());
wxCouponSendQuery.setSendType(EnumCouponSendSendType.COUPON_VERIFY.getCode());
actionLogType = EnumCouponActionChannelType.VERIFY.getCode();
configKey = "verifyConponSwitch";
} else {


+ 40
- 4
mallinkService/src/main/java/com/simple/service/impl/WxOrderServiceImpl.java Просмотреть файл

@@ -4,16 +4,15 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.simple.common.ErrorCode;
import com.simple.common.IdWorker;
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.common.ResultData;
import com.simple.domain.po.*;
import com.simple.domain.vo.WxOrderCVo;
import com.simple.enums.*;
import com.simple.exception.MallinkException;
import com.simple.mapper.*;
import com.simple.service.WxCUserService;
import com.simple.service.WxOrderService;
import com.simple.service.WxPayOrderService;
import com.simple.utils.RedisLock;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -60,6 +59,12 @@ public class WxOrderServiceImpl implements WxOrderService {
@Autowired
WxCUserService wxCUserService;

@Autowired
WxPayOrderMapper wxPayOrderMapper;

@Autowired
WxPayOrderService wxPayOrderService;

@Override
public PageInfo<WxOrder> listAsPage(WxOrder record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxOrderMapper.findList(record));
@@ -539,6 +544,37 @@ public class WxOrderServiceImpl implements WxOrderService {
return ret;
}

/**
* 微信关闭订单
*/
@Override
public ResultData orderClose(WxOrder order) {
// 1. get c appid
WxAppinfo appInfo = null;
WxAppinfo appinfoQ = new WxAppinfo();
appinfoQ.setTenantId(order.getTenantId());
appinfoQ.setType(EnumAppType.C.getCode());
List<WxAppinfo> appList = wxAppinfoMapper.select(appinfoQ);
if (appList.size() > 0) {
appInfo = appList.get(0);
}
// 2. get pay order
WxPayOrder payOrderQ = new WxPayOrder();
payOrderQ.setTenantId(order.getTenantId());
payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_WAY_WAIT.getCode());
List<WxPayOrder> payOrders = wxPayOrderMapper.select(payOrderQ);

for(WxPayOrder payOrder: payOrders) {
// 3. wx pay order close
try {
ResultData payclose = wxPayOrderService.payOrderClose(appInfo, payOrder);
} catch (Exception e) {
logger.error("微信关单失败:" + e.getMessage());
}
}
return new ResultData();
}

@Override
public WxOrder getById(Long id) {
return wxOrderMapper.selectByPrimaryKey(id);


+ 42
- 117
mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java Просмотреть файл

@@ -493,8 +493,9 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
}
}
}

/**
* 微信关闭订单
* 微信关闭支付订单
*/
@Override
public ResultData payOrderClose(WxAppinfo appInfo, WxPayOrder record) {
@@ -519,12 +520,18 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String result_code = returnMap.get("result_code");
if ("SUCCESS".equals(result_code)) {
record.setPayOrderStatus(EnumPayStatus.PAY_WAY_FAIL.getCode());
record.setPayOrderStatus(EnumPayStatus.PAY_WAY_CANCEL.getCode());
handlePayOrderStatusUpdate(record);
return new ResultData(Result.SUCCESS, "订单关闭成功", returnMap);
} else {
String errMsg = "";
JSONObject errObj = errorMapClose.getJSONObject(result_code);
record.setFailReason(errObj.toJSONString());
if (errObj != null) {
errMsg = errObj.toJSONString();
} else {
errMsg = returnMap.get("return_msg");
}
record.setFailReason(errMsg);
record.setUpdateTime(new Date());
try {
wxPayOrderMapper.updateByPrimaryKeySelective(record);
@@ -561,12 +568,18 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String result_code = returnMap.get("result_code");
if ("SUCCESS".equals(result_code)) {
record.setPayOrderStatus(EnumPayStatus.PAY_WAY_FAIL.getCode());
record.setPayOrderStatus(EnumPayStatus.PAY_WAY_CANCEL.getCode());
handlePayOrderStatusUpdate(record);
return new ResultData(Result.SUCCESS, "订单关闭成功", returnMap);
} else {
String errMsg = "";
JSONObject errObj = errorMapClose.getJSONObject(result_code);
record.setFailReason(errObj.toJSONString());
if (errObj != null) {
errMsg = errObj.toJSONString();
} else {
errMsg = returnMap.get("return_msg");
}
record.setFailReason(errMsg);
record.setUpdateTime(new Date());
try {
wxPayOrderMapper.updateByPrimaryKeySelective(record);
@@ -574,7 +587,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
logger.error("pay order update error: " + record.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}
return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), errObj.toJSONString(), returnMap);
return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), errMsg, returnMap);
}
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
@@ -755,24 +768,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单数据库更新失败: " + e.getMessage());
}

// 微信模板通知用户
/*
try {
WxAppinfo appinfoQ = new WxAppinfo();
appinfoQ.setTenantId(order.getTenantId());
appinfoQ.setType(EnumAppType.C.getCode());
List<WxAppinfo> appinfoList = wxAppinfoMapper.select(appinfoQ);
if (appinfoList.size() >0) {
WxAppinfo appinfo = appinfoList.get(0);
sendPaySuccessMsg(appinfo, order, updateOrder);
}
} catch (Exception e) {
logger.error("微信模板通知error: " + e.getMessage());
// throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单数据库更新失败: " + e.getMessage());
}
*/
// End of 微信模板通知用户

/*
Map<String, String> msgMap = new HashMap<>();
try {
@@ -825,6 +820,28 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
logger.error(e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL);
}

if (record.getPayOrderStatus() == EnumPayStatus.PAY_WAY_CANCEL.getCode()) {
// 支付订单取消
if (record.getPayAmount() > 0) {
// 1. get appinfo
WxAppinfo appInfo = null;
WxAppinfo appinfoQ = new WxAppinfo();
appinfoQ.setTenantId(order.getTenantId());
appinfoQ.setType(EnumAppType.C.getCode());
List<WxAppinfo> appList = wxAppinfoMapper.select(appinfoQ);
if (appList.size() > 0) {
appInfo = appList.get(0);
}
WxPayOrder payOrderQ = new WxPayOrder();
payOrderQ.setTenantId(order.getTenantId());
payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_WAY_WAIT.getCode());
List<WxPayOrder> payOrders = wxPayOrderMapper.select(payOrderQ);
for(WxPayOrder payOrder: payOrders) {
payOrderClose(appInfo, payOrder);
}
}
}
}

// 修改订单状态
@@ -901,100 +918,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
wxPayOrderMapper.deleteByPrimaryKey(id);
}

@Override
public void sendPaySuccess() {
/*
WxAppinfo appinfoQ = new WxAppinfo();
appinfoQ.setTenantId("234");
appinfoQ.setType(EnumAppType.C.getCode());
List<WxAppinfo> appinfoList= wxAppinfoMapper.select(appinfoQ);
WxAppinfo appinfo = appinfoList.get(0);

String payOrderIdStr = "196936823522459648";
Long payOrderId = Long.valueOf(payOrderIdStr);
WxPayOrder updateOrder = wxPayOrderMapper.selectByPrimaryKey(payOrderId);
WxOrder order = wxOrderMapper.selectByPrimaryKey(updateOrder.getOrderId());
sendPaySuccessMsg(appinfo, order, updateOrder);
*/
}

/**
* 微信模板通知用户
* @param updateOrder
* 支付时间 {{keyword1.DATA}}
* 支付方式 {{keyword2.DATA}}
* 支付金额 {{keyword3.DATA}}
* 商品名称 {{keyword4.DATA}}
* 商家名称 {{keyword5.DATA}}
* 订单状态 {{keyword6.DATA}}
*/
private void sendPaySuccessMsg(WxAppinfo appInfo, WxOrder order, WxPayOrder updateOrder) {
// 1. get template id
WxTemplateMsg msgQ = new WxTemplateMsg();
msgQ.setTenantId(order.getTenantId());
msgQ.setType(EnumTemplateType.PAY_SUCCESS.getCode());
WxTemplateMsg msg = null;
List<WxTemplateMsg> list= wxTemplateMsgMapper.select(msgQ);
if (list.size() > 0) {
msg = list.get(0);
}
if (msg == null) {
logger.error("找不到模板Id");
throw new MallinkException(ErrorCode.TEMPLATE_NOT_FOUND);
}
// 2. get coupon info
WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(order.getCouponId());
if (coupon == null) {
logger.error("找不到券信息");
throw new MallinkException(ErrorCode.COUPON_IS_EMPTY);
}
// 3. merchant info
WxMerchant merchant = wxMerchantMapper.selectByPrimaryKey(order.getMerchantId());
if (merchant == null) {
logger.error("找不到商户信息");
throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND);
}
// 3. get user info
WxCUser user = wxCUserMapper.selectByPrimaryKey(order.getCUserId());
if (user == null) {
logger.error("找不到C端用户");
throw new MallinkException(ErrorCode.USER_IS_EMPTY);
}

if (StringUtils.isBlank(updateOrder.getPrepayId())) {
logger.error("prepayId为空");
throw new MallinkException(ErrorCode.PREPAY_ID_IS_EMPTY);
}

WxMaService wxMaService = MaUtil.getWeappService(appInfo);


SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
WxMaTemplateMessage templateMessage = WxMaTemplateMessage.builder()
.toUser(user.getOpenId())
.formId(updateOrder.getPrepayId()) // 微信支付的formId是prepayId
.page("pages/index/index")
.data(Lists.newArrayList(
new WxMaTemplateMessage.Data("keyword1", dateFormat.format(new Date()), "#173177"),
new WxMaTemplateMessage.Data("keyword2", "微信支付", "#173177"),
new WxMaTemplateMessage.Data("keyword3", String.valueOf(updateOrder.getPayAmount()*1.0/100) + "元", "#173177"),
new WxMaTemplateMessage.Data("keyword4", coupon.getTitle(), "#173177"),
new WxMaTemplateMessage.Data("keyword5", merchant.getName(), "#173177"),
new WxMaTemplateMessage.Data("keyword6", EnumOrderStatus.getEnum(order.getOrderStatus()).getMessage(), "#173177")))
.templateId(msg.getTemplateId())
.emphasisKeyword("keyword1.DATA")
.build();
//templateMessage.addData( new WxMaTemplateMessage.Data("keyword1", "339208499", "#173177"));
try {
wxMaService.getMsgService().sendTemplateMsg(templateMessage);
} catch (WxErrorException e) {
logger.error("支付通知发送失败: " + e.getMessage());
throw new MallinkException(ErrorCode.TEMPLATE_SEND_FAILED);
}
}

public static void main(String [] args) {
Integer v = 500;
Integer v = 50;
Integer rate = 6;
Double dChargeFee = Math.ceil(v*1.0D*6/1000);
Integer share_amount = v - dChargeFee.intValue();


+ 19
- 2
mallinkService/src/main/resources/mapper/MallUserInfoMapper.xml Просмотреть файл

@@ -12,10 +12,12 @@
<result column="status" jdbcType="INTEGER" property="status" />
<result column="is_admin" jdbcType="INTEGER" property="isAdmin" />
<result column="nick_name" jdbcType="VARCHAR" property="nickName" />
<result column="phone" jdbcType="VARCHAR" property="phone" />
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`nick_name`
`id`,`tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`nick_name`,`phone`
</sql>

<sql id="dynamicWhereConditions">
@@ -69,7 +71,10 @@
<if test=" null != isAdmin ">
and `is_admin` = #{isAdmin}
</if>
</if>
<if test=" null != phone ">
and `phone` = #{phone}
</if>
<if test=" null != ids ">
and id in
@@ -98,5 +103,17 @@
AND p.permission = #{permission}
</select>
<select id="cntByUserName" resultType="java.lang.Long">
select count(*) from mall_user_info where 1=1
<if test=" null != username ">
and username=#{username}
</if>
<if test=" null != phone ">
and `phone` = #{phone}
</if>
<if test=" null != id ">
and `id` != #{id}
</if>
</select>
</mapper>

+ 17
- 1
mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml Просмотреть файл

@@ -136,5 +136,21 @@
and birthdate &lt;= #{birthEndTime}
</if>
</select>
<select id="findCount" parameterType="com.simple.domain.dto.WxCUserBasicInfoDto" resultType="java.lang.Long">
select count(id) from wx_c_user_basic_info where 1=1
<if test=" null != sex ">
and gender =#{sex}
</if>
<if test=" null != startTime ">
and create_date &gt;= #{startTime}
</if>
<if test=" null != endTime">
and create_date &lt; #{endTime}
</if>
<if test="null != tenantId">
and tenant_id =#{tenantId}
</if>
</select>
</mapper>

+ 1
- 1
mallinkService/src/main/resources/mapper/WxMallMapper.xml Просмотреть файл

@@ -36,7 +36,7 @@
</if>
<if test=" null != tenantId ">
and `tenant_id` like concat('%', #{tenantId},'%')
and `tenant_id` = #{tenantId}
</if>


Загрузка…
Отмена
Сохранить