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

[卡券][修改]:卡密、精准发卡等 code merge

release_toaliyun_real
Stormeye Wu 6 лет назад
Родитель
Сommit
a08e35133f
39 измененных файлов: 1220 добавлений и 37 удалений
  1. +20
    -1
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java
  2. +62
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPasswordController.java
  3. +78
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPresentController.java
  4. +1
    -1
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java
  5. +2
    -0
      mallinkAdmin/src/main/resources/db/migration/V201909170450__G_COUPON_PRESENT_CHANGED.sql
  6. +2
    -0
      mallinkAdmin/src/main/resources/db/migration/V201909170451__G_MSG_CALLBACK.sql
  7. +95
    -0
      mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java
  8. +3
    -0
      mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java
  9. +3
    -3
      mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarTJDCallBackController.java
  10. +6
    -2
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java
  11. +3
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java
  12. +43
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxCouponPassword.java
  13. +41
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxCouponPresent.java
  14. +3
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxMsgCallback.java
  15. +14
    -0
      mallinkService/src/main/java/com/iformall/domain/vo/WxCouponPasswordCountInfoVO.java
  16. +6
    -5
      mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java
  17. +36
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordSupport.java
  18. +2
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java
  19. +6
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java
  20. +23
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxCouponPasswordMapper.java
  21. +13
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxCouponPresentMapper.java
  22. +3
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxCreditHistoryMapper.java
  23. +72
    -0
      mallinkService/src/main/java/com/iformall/service/WxCouponPasswordService.java
  24. +19
    -0
      mallinkService/src/main/java/com/iformall/service/WxCouponPresentService.java
  25. +1
    -3
      mallinkService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java
  26. +1
    -1
      mallinkService/src/main/java/com/iformall/service/WxOrderService.java
  27. +178
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponPasswordServiceImpl.java
  28. +148
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponPresentServiceImpl.java
  29. +14
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java
  30. +13
    -4
      mallinkService/src/main/java/com/iformall/service/impl/WxMsgCallbackServiceImpl.java
  31. +6
    -3
      mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java
  32. +14
    -6
      mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java
  33. +4
    -3
      mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java
  34. +3
    -0
      mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml
  35. +1
    -0
      mallinkService/src/main/resources/mapper/WxCouponMapper.xml
  36. +143
    -0
      mallinkService/src/main/resources/mapper/WxCouponPasswordMapper.xml
  37. +58
    -0
      mallinkService/src/main/resources/mapper/WxCouponPresentMapper.xml
  38. +10
    -1
      mallinkService/src/main/resources/mapper/WxCreditHistoryMapper.xml
  39. +70
    -2
      mallinkSysAdmin/src/main/java/com/iformall/controller/sys/DataInitController.java

+ 20
- 1
mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java Просмотреть файл

@@ -8,9 +8,11 @@ import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxCouponChannel;
import com.iformall.domain.po.WxCouponPassword;
import com.iformall.domain.vo.WxCouponStatisVo;
import com.iformall.enums.*;
import com.iformall.mapper.WxCouponChannelMapper;
import com.iformall.service.WxCouponPasswordService;
import com.iformall.service.WxCouponService;
import com.iformall.service.WxFlowService;
import com.iformall.utils.DateUtils;
@@ -24,6 +26,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;

@RestController
@@ -35,6 +40,8 @@ public class WxCouponController extends BaseController {
@Autowired
private WxCouponService wxCouponService;
@Autowired
private WxCouponPasswordService couponPasswordService;
@Autowired
private WxCouponChannelMapper wxCouponChannelMapper;
@Autowired
private WxFlowService wxFlowService;
@@ -79,6 +86,7 @@ public class WxCouponController extends BaseController {
@SystemControllerLog(description = "券投放-新增")
public ResultData add(@RequestBody WxCoupon wxCoupon) {
logger.debug("[" + getIpAddr() + "] WxCouponController::add");
wxCoupon.setTenantId(getTenantId());

ResultData resultData = wxCouponService.saveOrUpdate(wxCoupon);
if(resultData.code != 200){
@@ -257,7 +265,7 @@ public class WxCouponController extends BaseController {
@ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true)
@SystemControllerLog(description = "券投放-查询")
public ResultData findById(@RequestParam Long id) {
logger.debug("[" + getIpAddr() + "] WxCouponController::findById");;
logger.debug("[" + getIpAddr() + "] WxCouponController::findById");
return new ResultData(wxCouponService.getVoById(id));
}

@@ -334,4 +342,15 @@ public class WxCouponController extends BaseController {
return new ResultData(pages);
}

@GetMapping("exportCouponPassword")
@SystemControllerLog(description = "卡券兑换码-导出数据")
public void exportCouponPassword(@ModelAttribute WxCouponPassword wxCouponPassword, HttpServletRequest request, HttpServletResponse response) {
wxCouponPassword.setTenantId(getTenantId());
wxCouponPassword.setExpireDate(new Date());
if (wxCouponPassword.getCouponId() == null) {
wxCouponPassword.setCouponId(0L);
}
couponPasswordService.exportData(request, response, wxCouponPassword);
}

}

+ 62
- 0
mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPasswordController.java Просмотреть файл

@@ -0,0 +1,62 @@
package com.iformall.controller.market;

import com.github.pagehelper.PageInfo;
import com.iformall.annotation.SystemControllerLog;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.BaseEntity;
import com.iformall.domain.po.WxCouponPassword;
import com.iformall.domain.vo.WxCouponPasswordCountInfoVO;
import com.iformall.service.WxCouponPasswordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
* @author gongbiao
*/
@RestController
@RequestMapping("couponPassword")
@Api(description = "免费卡接口")
public class WxCouponPasswordController extends BaseController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
private WxCouponPasswordService wxCouponPasswordService;

@ApiOperation("分页列表接口")
@GetMapping("/list")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
@SystemControllerLog(description = "列表")
public ResultData list(@ModelAttribute WxCouponPassword wxCouponPassword, Integer pageNum, Integer pageSize) {
logger.debug("[" + getIpAddr() + "] WxCouponPasswordController::list");
wxCouponPassword.setTenantId(getTenantId());
wxCouponPassword.setSortColumns(BaseEntity.SortField.CreateDate_DESC, BaseEntity.SortField.Id_DESC);
final PageInfo<WxCouponPassword> page = wxCouponPasswordService.listAsPage(wxCouponPassword, pageNum, pageSize);
return new ResultData(page);
}

@ApiOperation("可发送卡数据")
@GetMapping("/findCouponList")
@SystemControllerLog(description = "可发送卡数据")
public ResultData findCouponList() {
logger.debug("[" + getIpAddr() + "] WxCouponPasswordController::findCouponList");
List<WxCouponPasswordCountInfoVO> voList = wxCouponPasswordService.findCouponList(getTenantId());
return new ResultData(Result.SUCCESS, "查询成功", voList);
}


}

+ 78
- 0
mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPresentController.java Просмотреть файл

@@ -0,0 +1,78 @@
package com.iformall.controller.market;

import com.github.pagehelper.PageInfo;
import com.iformall.annotation.SystemControllerLog;
import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.BaseEntity;
import com.iformall.domain.po.MallUserInfo;
import com.iformall.domain.po.WxCouponPresent;
import com.iformall.service.WxCouponPresentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
* @author gongbiao
*/
@RestController
@RequestMapping("couponPresent")
@Api(description = "卡投放接口")
public class WxCouponPresentController extends BaseController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
private WxCouponPresentService wxCouponPresentService;

@ApiOperation("分页列表接口")
@GetMapping("/list")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
@SystemControllerLog(description = "列表")
public ResultData list(@ModelAttribute WxCouponPresent wxCouponPresent, Integer pageNum, Integer pageSize) {
logger.debug("[" + getIpAddr() + "] WxCouponPresentController::list");
wxCouponPresent.setTenantId(getTenantId());
wxCouponPresent.setSortColumns(BaseEntity.SortField.CreateTime_DESC, BaseEntity.SortField.Id_DESC);
final PageInfo<WxCouponPresent> page = wxCouponPresentService.listAsPage(wxCouponPresent, pageNum, pageSize);
return new ResultData(page);
}

@ApiOperation("根据id查询接口")
@GetMapping("/findById")
@ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true)
@SystemControllerLog(description = "查询")
public ResultData findById(@RequestParam Long id) {
logger.debug("[" + getIpAddr() + "] WxCouponPresentController::findById");
return new ResultData(wxCouponPresentService.findById(id));
}


@ApiOperation("新增接口")
@PostMapping("add")
@SystemControllerLog(description = "新增")
public ResultData add(@RequestBody WxCouponPresent wxCouponPresent) {
logger.debug("[" + getIpAddr() + "] WxCouponInjectController::add");

if (wxCouponPresent.getCouponId() == null) {
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "请选择卡");
}

if (wxCouponPresent.getPhones().isEmpty()) {
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "请填写手机号");
}

MallUserInfo user = getUser();
wxCouponPresent.setTenantId(user.getTenantId());
wxCouponPresent.setUserId(user.getId());

return wxCouponPresentService.add(wxCouponPresent);
}

}

+ 1
- 1
mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java Просмотреть файл

@@ -164,7 +164,7 @@ public class WxOrderController extends BaseController {
if (!wxOrderService.checkCouponIsFree(coupon))
return new ResultData(ErrorCode.COUPON_IS_NOT_FREE);
// 免费券
order = wxOrderService.saveFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId());
order = wxOrderService.saveFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId(), null);
return new ResultData(order);
} catch (MallinkException e) {
logger.error(e.getMessage());


+ 2
- 0
mallinkAdmin/src/main/resources/db/migration/V201909170450__G_COUPON_PRESENT_CHANGED.sql Просмотреть файл

@@ -0,0 +1,2 @@
alter table wx_coupon_present
add column send_amount int(11) default 0 not null comment '发送数量';

+ 2
- 0
mallinkAdmin/src/main/resources/db/migration/V201909170451__G_MSG_CALLBACK.sql Просмотреть файл

@@ -0,0 +1,2 @@
alter table wx_msg_callback
add column business_id bigint(20) default 0 not null comment '业务ID';

+ 95
- 0
mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java Просмотреть файл

@@ -0,0 +1,95 @@
package com.iformall.controller;

import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.domain.po.*;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.service.*;
import com.iformall.utils.Constant;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.Map;

@RestController
@RequestMapping("/api/couponPassword")
@Api(description = "卡密相关接口")
public class WxCouponPasswordController extends BaseController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
private WxCouponPasswordService couponPasswordService;

@Autowired
private WxCouponService couponService;
@Autowired
private WxOrderService orderService;


@ApiOperation(value = "根据卡密领卡", notes = "{\"password\":\"String\",\"formId\":\"String\"}")
@PostMapping("getCouponOrderByPassword")
public ResultData getCouponOrderByPassword(@RequestBody Map<String, String> params) {
logger.info("getCouponOrderByPassword: " + getIpAddr() + params.toString());
String password = params.get("password");
String formId = params.get("formId");
if (StringUtils.isBlank(password) || password.equalsIgnoreCase(Constant.UNDEFINED)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "password不能为空");
}
// 1. 根据password获取领取的couponId
WxCouponPassword couponPasswordQ = new WxCouponPassword();
couponPasswordQ.setTenantId(getTenantId());
couponPasswordQ.setPassword(password);
couponPasswordQ.setExpireDate(new Date());
WxCouponPassword couponPassword = null;
try {
couponPassword = couponPasswordService.getByObj(couponPasswordQ);
} catch (MallinkException e) {
logger.error(e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(500, e.getMessage());
}

WxCUser cuUser = getUser();
WxCoupon coupon = couponService.getById(couponPassword.getCouponId());
if (coupon == null) {
return new ResultData(ErrorCode.COUPON_IS_EMPTY);
}
if (coupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) {
logger.error("此券已作废:" + coupon.getId());
return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF);
}

// 2. 设置已使用
try {
WxCouponPassword updateCouponPwd = new WxCouponPassword();
updateCouponPwd.setId(couponPassword.getId());
updateCouponPwd.setStatus(EnumCouponPasswordStatus.USED.getCode());
couponPassword.setStatus(EnumCouponPasswordStatus.USED.getCode());
couponPasswordService.saveOrUpdate(updateCouponPwd);
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.DB_FAIL);
}

// 3. 领取free coupon
try {
WxOrder order = orderService.saveFreeOrderForCoupon(cuUser, coupon, null, formId, couponPassword.getId());
} catch (MallinkException e) {
logger.error(e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(500, e.getMessage());
}
return new ResultData();
}
}

+ 3
- 0
mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java Просмотреть файл

@@ -83,6 +83,9 @@ public class WxOrderController extends BaseController {
if (coupon == null) {
return new ResultData(ErrorCode.COUPON_IS_EMPTY);
}
if (coupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) {
return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF);
}
WxOrder order = wxOrderService.saveOrderForCoupon(user, coupon, orderSaveDto, isPress);
return new ResultData(order);
} catch (MallinkException e) {


+ 3
- 3
mallinkCallback/src/main/java/com/iformall/controller/callback/WxCarTJDCallBackController.java Просмотреть файл

@@ -12,7 +12,7 @@ import com.iformall.enums.EnumCouponSendSendType;
import com.iformall.enums.EnumETCPCode;
import com.iformall.service.*;
import com.iformall.utils.DateUtils;
import com.iformall.utils.car.ETCPUtil;
import com.iformall.utils.car.TJDCarUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -139,7 +139,7 @@ public class WxCarTJDCallBackController extends BaseController {
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setTenantId(park.getTenantId());
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_TJD.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_TJD_CALLBACK_PARK_IN.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);
@@ -185,7 +185,7 @@ public class WxCarTJDCallBackController extends BaseController {
Date currentDate = new Date();
WxCarCmdLog wxCarCmdLog = new WxCarCmdLog();
wxCarCmdLog.setVendorType(EnumCarVendor.CAR_TJD.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode());
wxCarCmdLog.setCmdType(EnumCarCmd.CAR_TJD_CALLBACK_PARK_OUT.getCode());
wxCarCmdLog.setCmdJson(JSON.toJSONString(paramMap));
wxCarCmdLog.setCreateDate(currentDate);
wxCarCmdLog.setUpdateDate(currentDate);


+ 6
- 2
mallinkService/src/main/java/com/iformall/common/ErrorCode.java Просмотреть файл

@@ -219,8 +219,12 @@ public enum ErrorCode{
COUPON_PRESS_IS_OVERTIME(9071, "砍价已超时"),
COUPON_PRESS_IS_EXIST(9072, "此人已参与此次砍价"),



/**
* 卡密
*/
COUPON_PASSWORD_NOT_FOUND(9501, "兑换码未找到"),
COUPON_PASSWORD_HAD_USED(9502, "兑换码已失效"),
COUPON_PASSWORD_IS_CANCELED(9503, "兑换码已失效"),

/**
* 微信


+ 3
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java Просмотреть файл

@@ -139,6 +139,9 @@ public class WxCoupon extends BaseEntity {
@io.swagger.annotations.ApiModelProperty(value="最后一次审批操作类型,取值同EnumFlowKey",name="approvalType")
private Integer approvalType;

@io.swagger.annotations.ApiModelProperty(value="卡密是否支持(0:不支持,1支持)",name="passwordSupport")
private Integer passwordSupport;

@TableField(exist = false)
private String merchantParams;



+ 43
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxCouponPassword.java Просмотреть файл

@@ -0,0 +1,43 @@
package com.iformall.domain.po;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;

@TableName(value = "wx_coupon_password")
@Data
@EqualsAndHashCode(callSuper = true)
public class WxCouponPassword extends BaseEntity {

protected Long id;
@io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId")
private String tenantId;
@io.swagger.annotations.ApiModelProperty(value="卡券ID",name="couponId")
private Long couponId;
@io.swagger.annotations.ApiModelProperty(value="卡券短ID",name="couponShort")
private String couponShort;
@Excel(name = "兑换码", width = 20, orderNum = "1")
@io.swagger.annotations.ApiModelProperty(value="商户名称",name="password")
private String password;
@io.swagger.annotations.ApiModelProperty(value="卡密状态: 0初始1信息发出中2信息已发出3已使用",name="status")
private Integer status;
@io.swagger.annotations.ApiModelProperty(value="卡密发送到手机",name="sendedPhone")
private String sendedPhone;
@io.swagger.annotations.ApiModelProperty(value="卡包ID(coupon_order_id/card_id)",name="cardId")
private Long cardId;
@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="expireDate")
private Date expireDate;

@TableField(exist = false)
private String statusStr;

}

+ 41
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxCouponPresent.java Просмотреть файл

@@ -0,0 +1,41 @@
package com.iformall.domain.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;

@TableName(value = "wx_coupon_present")
@Data
@EqualsAndHashCode(callSuper = true)
public class WxCouponPresent extends BaseEntity {

protected Long id;

@ApiModelProperty(value = "租户ID", name = "tenantId")
private String tenantId;
@ApiModelProperty(value = "用户ID", name = "userId")
private Long userId;
@ApiModelProperty(value = "卡券ID", name = "couponId")
private Long couponId;
@ApiModelProperty(value = "卡券名称", name = "couponName")
private String couponName;
@ApiModelProperty(value = "手机", name = "phones")
private String phones;
@ApiModelProperty(value = "创建时间", name = "createDate")
private Date createTime;
@ApiModelProperty(value = "更新时间", name = "updateDate")
private Date updateTime;
@ApiModelProperty(value = "发送数量", name = "sendAmount")
private Integer sendAmount;

@TableField(exist = false)
protected Date sendTimeStart;

@TableField(exist = false)
protected Date sendTimeEnd;

}

+ 3
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxMsgCallback.java Просмотреть файл

@@ -46,4 +46,7 @@ public class WxMsgCallback extends BaseEntity {
@io.swagger.annotations.ApiModelProperty(value="msgId",name="msgId")
private Long msgId;

@io.swagger.annotations.ApiModelProperty(value = "业务ID", name = "businessId")
private Long businessId;

}

+ 14
- 0
mallinkService/src/main/java/com/iformall/domain/vo/WxCouponPasswordCountInfoVO.java Просмотреть файл

@@ -0,0 +1,14 @@
package com.iformall.domain.vo;

import lombok.Data;

/**
* @author gongbiao
*/
@Data
public class WxCouponPasswordCountInfoVO {

private Long couponId;
private String couponName;
private Long couponCount;
}

mallinkService/src/main/java/com/iformall/enums/EnumCardPasswordStatus.java → mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java Просмотреть файл

@@ -3,16 +3,17 @@ package com.iformall.enums;
/**
* Created by Stormeye on 2019/09/17.
*/
public enum EnumCardPasswordStatus {
public enum EnumCouponPasswordStatus {


INIT(0, "初始"),
MSG_SENDING(1, "消息发送中"),
MSG_SENDED(2, "消息已发送"),
USED(3, "已使用");
USED(3, "已使用"),
CANCEL(4, "已作废");

public static EnumCardPasswordStatus getEnum(Integer code) {
for (EnumCardPasswordStatus value : values()) {
public static EnumCouponPasswordStatus getEnum(Integer code) {
for (EnumCouponPasswordStatus value : values()) {
if (value.getCode().equals(code)) {
return value;
}
@@ -23,7 +24,7 @@ public enum EnumCardPasswordStatus {
private Integer code;
private String message;

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

+ 36
- 0
mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordSupport.java Просмотреть файл

@@ -0,0 +1,36 @@
package com.iformall.enums;

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

NOT_SUPPORT(0, "不支持"),
SUPPORTED(1, "支持"),
;

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

private Integer code;
private String message;

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

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 2
- 0
mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java Просмотреть файл

@@ -34,6 +34,8 @@ public enum EnumMsgModel {
//会员生日券
COUPON_BIRTHDAY_OPENED(28, "会员生日券倍率开启"),
COUPON_BIRTHDAY_OPENED_NO(29, "会员生日券倍率未开启"),

COUPON_CARD_SEND(30, "系统发卡"),
;

public static EnumMsgModel getEnum(Integer code) {


+ 6
- 0
mallinkService/src/main/java/com/iformall/mapper/WxCUserBasicInfoMapper.java Просмотреть файл

@@ -44,5 +44,11 @@ public interface WxCUserBasicInfoMapper extends CommonMapper<WxCUserBasicInfo, S
long findImportUserCount(WxCUserBasicInfoDto dto);

void incActRecordById(Long id);

/**
* 查找wx_c_user中不存在的用户
* @return
*/
List<WxCUserBasicInfo> selectNotCUserList();
}


+ 23
- 0
mallinkService/src/main/java/com/iformall/mapper/WxCouponPasswordMapper.java Просмотреть файл

@@ -0,0 +1,23 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxCouponPassword;
import com.iformall.domain.vo.WxCouponPasswordCountInfoVO;

import java.util.List;

public interface WxCouponPasswordMapper extends CommonMapper<WxCouponPassword, Long> {

List<WxCouponPassword> findList(WxCouponPassword wxCouponPassword);

List<WxCouponPassword> findAvaPasswordListByCouponId(WxCouponPassword wxCouponPassword);

void insertCouponPasswds(List<WxCouponPassword> pwdlist);
int updateStatusByCouponId(Long couponId);
List<WxCouponPassword> findCouponGroupList(WxCouponPassword wxCouponPassword);

List<WxCouponPasswordCountInfoVO> findCouponCountInfo(WxCouponPassword wxCouponPassword);

void updateStatus(List<WxCouponPassword> tempList);

}

+ 13
- 0
mallinkService/src/main/java/com/iformall/mapper/WxCouponPresentMapper.java Просмотреть файл

@@ -0,0 +1,13 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxCouponPassword;
import com.iformall.domain.po.WxCouponPresent;

import java.util.List;

public interface WxCouponPresentMapper extends CommonMapper<WxCouponPresent, Long> {

List<WxCouponPresent> findList(WxCouponPresent wxCouponPresent);

}

+ 3
- 0
mallinkService/src/main/java/com/iformall/mapper/WxCreditHistoryMapper.java Просмотреть файл

@@ -4,6 +4,7 @@ import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxCreditHistory;
import com.iformall.domain.vo.WxCreditHistoryNewIdVo;
import com.iformall.domain.vo.WxCreditHistoryVo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
@@ -31,4 +32,6 @@ public interface WxCreditHistoryMapper extends CommonMapper<WxCreditHistory, Lon
long getPeopleCount(WxCreditHistory wxCreditHistory);

List<WxCreditHistory> findListAfter(Integer creditType, String dateTime);

List<WxCreditHistory> findListByIds(@Param("userIds") List<Long> userIds);
}

+ 72
- 0
mallinkService/src/main/java/com/iformall/service/WxCouponPasswordService.java Просмотреть файл

@@ -0,0 +1,72 @@
package com.iformall.service;

import com.github.pagehelper.PageInfo;
import com.iformall.domain.po.WxCouponPassword;
import com.iformall.domain.vo.WxCouponPasswordCountInfoVO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

public interface WxCouponPasswordService {

/**
* 根据实体查询分页列表
*
* @param record
* @param pageIndex
* @param pageSize
* @return
*/
PageInfo<WxCouponPassword> listAsPage(WxCouponPassword record, Integer pageIndex, Integer pageSize);
/**
* 根据Id获得实体
*
* @param id
* @return
*/
WxCouponPassword getById(Long id);

/**
* 根据密码获取卡密信息
*
* @param obj
* @return
*/
WxCouponPassword getByObj(WxCouponPassword obj);
/**
* 保存或更新实体
*
* @param record
*/
void saveOrUpdate(WxCouponPassword record);

/**
* 根据Id删除实体
*
* @param id
*/
void deleteById(Long id);

/**
* 生产卡密
* @param tenantId
* @param couponId
* @param inventory
*/
void mkPasswords(String tenantId, Long couponId, Integer inventory);


List<WxCouponPasswordCountInfoVO> findCouponList(String tenantId);

/**
* 导出兑换码
* @param request
* @param response
* @param couponPassword
*/
void exportData(HttpServletRequest request, HttpServletResponse response, WxCouponPassword couponPassword);

}

+ 19
- 0
mallinkService/src/main/java/com/iformall/service/WxCouponPresentService.java Просмотреть файл

@@ -0,0 +1,19 @@
package com.iformall.service;

import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCouponPresent;

/**
* @author gongbiao
*/
public interface WxCouponPresentService {


PageInfo<WxCouponPresent> listAsPage(WxCouponPresent wxCouponPresent, Integer pageNum, Integer pageSize);

WxCouponPresent findById(Long id);

ResultData add(WxCouponPresent wxCouponPresent);

}

+ 1
- 3
mallinkService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java Просмотреть файл

@@ -4,8 +4,6 @@ import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxMsgValidationcode;

import java.util.Map;

public interface WxMsgValidationcodeService {
/**
* 根据实体查询分页列表
@@ -44,6 +42,6 @@ public interface WxMsgValidationcodeService {
ResultData hasvalidationcode(WxMsgValidationcode record);


void addMsgCallback(WxMsgValidationcode wxmsg, String batchNo);
void addMsgCallback(WxMsgValidationcode wxmsg, String batchNo, String id);
}

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

@@ -176,7 +176,7 @@ public interface WxOrderService {
boolean checkCouponIsFree(WxCoupon coupon);

// 2. 创建免费订单, 领取 couponOrder
WxOrder saveFreeOrderForCoupon(WxCUser user, WxCoupon coupon, Long couponChannelId, String formId);
WxOrder saveFreeOrderForCoupon(WxCUser user, WxCoupon coupon, Long couponChannelId, String formId, Long couponPasswordId);

// 3. 创建有价订单
WxOrder saveNoFreeOrderForCoupon(WxCUser user, WxCoupon coupon, Long couponChannelId, boolean isPress, Long orderGroupId, String formId);


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

@@ -0,0 +1,178 @@
package com.iformall.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iformall.common.IdWorker;
import com.iformall.domain.po.WxCouponPassword;
import com.iformall.enums.EnumCouponPasswordStatus;
import com.iformall.domain.vo.WxCouponPasswordCountInfoVO;
import com.iformall.common.ErrorCode;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.WxCouponPasswordMapper;
import com.iformall.service.ExcelService;
import com.iformall.service.WxCouponPasswordService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

@Service
public class WxCouponPasswordServiceImpl implements WxCouponPasswordService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
WxCouponPasswordMapper wxCouponPasswordMapper;

@Autowired
ExcelService excelService;


@Override
public PageInfo<WxCouponPassword> listAsPage(WxCouponPassword record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponPasswordMapper.findList(record));
}

@Override
public WxCouponPassword getById(Long id) {
return wxCouponPasswordMapper.selectById(id);
}

@Override
public WxCouponPassword getByObj(WxCouponPassword obj) {
List<WxCouponPassword> pwdList = wxCouponPasswordMapper.findList(obj);
if (pwdList.size() <= 0) {
throw new MallinkException(ErrorCode.COUPON_PASSWORD_NOT_FOUND);
}
WxCouponPassword password = null;
Integer errCode = EnumCouponPasswordStatus.INIT.getCode();
for( WxCouponPassword pwd: pwdList) {
if (pwd.getStatus().equals(EnumCouponPasswordStatus.USED.getCode())) {
errCode = EnumCouponPasswordStatus.USED.getCode();
continue;
}
if (!pwd.getStatus().equals(EnumCouponPasswordStatus.USED.getCode()) &&
!pwd.getStatus().equals(EnumCouponPasswordStatus.CANCEL.getCode())) {
password = pwd;
}
}
if (password == null) {
if (errCode.equals(EnumCouponPasswordStatus.USED.getCode())) {
logger.error("卡券已使用");
throw new MallinkException(ErrorCode.COUPON_PASSWORD_HAD_USED);
} else {
logger.error("卡券已过期或已作废");
throw new MallinkException(ErrorCode.COUPON_PASSWORD_IS_CANCELED);
}
}
return password;
}

@Override
public void saveOrUpdate(WxCouponPassword record) {
if (record.getId() == null) {
//record.setId(UUID.randomUUID().toString().replaceAll("-", ""));
final IdWorker idWorker = IdWorker.get();
record.setId(idWorker.nextId());
wxCouponPasswordMapper.insert(record);
} else {
wxCouponPasswordMapper.updateById(record);
}
}

@Override
public void deleteById(Long id) {
wxCouponPasswordMapper.deleteById(id);
}

@Override
public List<WxCouponPasswordCountInfoVO> findCouponList(String tenantId) {
WxCouponPassword wxCouponPassword = new WxCouponPassword();
wxCouponPassword.setTenantId(tenantId);
return wxCouponPasswordMapper.findCouponCountInfo(wxCouponPassword);
}

@Override
public void mkPasswords(String tenantId, Long couponId, Integer inventory) {
String strAll = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 1.获取 coupon short 1
int couponShort = 0;
String couponShortStr = "0";
WxCouponPassword pwQ = new WxCouponPassword();
pwQ.setTenantId(tenantId);
List<WxCouponPassword> pwgList = wxCouponPasswordMapper.findCouponGroupList(pwQ);
couponShort = pwgList.size();
couponShortStr = String.valueOf(strAll.charAt(couponShort));
// 2.随机字符
Random rand = new Random();
List<String> pwList = new ArrayList<>();
while (true) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < 9; j++) {
int f = (int) (Math.random() * 62);
sb.append(strAll.charAt(f));
if (j == 4) {
sb.append(couponShortStr);
}
}
String pwd = sb.toString();
if (!pwList.stream().anyMatch(oPwd->oPwd.equals(pwd))) {
pwList.add(pwd);
} else {
continue;
}

if (pwList.size() >= inventory) {
break;
}
}
// 3. save to db
final IdWorker idWorker = IdWorker.get();
Date curDate = new Date();
List<WxCouponPassword> couponPasswords = new ArrayList<>();
for (int i=0;i<pwList.size();i++) {
WxCouponPassword newOne = new WxCouponPassword();
newOne.setId(idWorker.nextId());
newOne.setTenantId(tenantId);
newOne.setCouponId(couponId);
newOne.setCouponShort(couponShortStr);
newOne.setPassword(pwList.get(i));
newOne.setStatus(EnumCouponPasswordStatus.INIT.getCode());
newOne.setCreateDate(curDate);
newOne.setUpdateDate(curDate);
couponPasswords.add(newOne);
}
wxCouponPasswordMapper.insertCouponPasswds(couponPasswords);
}

@Override
public void exportData(HttpServletRequest request, HttpServletResponse response, WxCouponPassword couponPassword) {
List<WxCouponPassword> pwdList = wxCouponPasswordMapper.findAvaPasswordListByCouponId(couponPassword);
if (pwdList.isEmpty()) {
throw new MallinkException(ErrorCode.COUPON_PASSWORD_NOT_FOUND);
}
excelService.exportExcel(pwdList, null, "兑换码", WxCouponPassword.class, "卡兑换码.xlsx", response, false);

}

/*
public static void main(String[] args) {
WxCouponPasswordServiceImpl ll = new WxCouponPasswordServiceImpl();
long startTime = System.currentTimeMillis();
System.out.println(startTime);
ll.mkPasswords("456", 12345L, 100);
long endTime = System.currentTimeMillis();
System.out.println(endTime);
long usedTime = (endTime-startTime)/1000;
System.out.println("耗时:" + usedTime + "s");
}
*/
}

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

@@ -0,0 +1,148 @@
package com.iformall.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxCoupon;
import com.iformall.domain.po.WxCouponPassword;
import com.iformall.domain.po.WxCouponPresent;
import com.iformall.domain.po.msg.WxMsgRecord;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.WxCouponPasswordMapper;
import com.iformall.mapper.WxCouponPresentMapper;
import com.iformall.mq.MqBaseProducer;
import com.iformall.service.PushLimitService;
import com.iformall.service.WxAppinfoService;
import com.iformall.service.WxCouponPresentService;
import com.iformall.service.WxCouponService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

/**
* @author gongbiao
*/
@Service
public class WxCouponPresentServiceImpl implements WxCouponPresentService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
WxCouponPresentMapper wxCouponPresentMapper;

@Autowired
PushLimitService pushLimitService;

@Autowired
WxCouponService wxCouponService;

@Autowired
WxCouponPasswordMapper wxCouponPasswordMapper;

@Autowired
WxAppinfoService wxAppinfoService;

@Autowired
private MqBaseProducer mqBaseProducer;

@Override
public PageInfo<WxCouponPresent> listAsPage(WxCouponPresent record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponPresentMapper.findList(record));
}

@Override
public WxCouponPresent findById(Long id) {
return wxCouponPresentMapper.selectById(id);
}

@Override
public ResultData add(WxCouponPresent record) {
String tenantId = record.getTenantId();
try {
pushLimitService.checkSendTime(tenantId);
} catch (MallinkException e) {
logger.error(e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
}
WxCoupon wxCoupon = wxCouponService.getById(record.getCouponId());
if (wxCoupon.getValidType().equals(EnumCouponValidType.BETWEEN_TWO_TIME.getCode())) { //时间范围
if (new Date().after(wxCoupon.getValidEndDate())) {
return new ResultData(ErrorCode.COUPON_IS_EXPIRED);
}
}
if (!wxCoupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_THROW_IN.getCode())) {
return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF);
}
//获取手机号
record.setCouponName(wxCoupon.getTitle());
String phones = record.getPhones();
String[] phoneSplit = phones.split(",");
Set<String> phoneSet = new HashSet<>(phoneSplit.length);
for (String phone : phoneSplit) {
if (!phone.isEmpty()) {
phoneSet.add(phone);
}
}

//查询有效券数量
WxCouponPassword wxCouponPassword = new WxCouponPassword();
wxCouponPassword.setTenantId(tenantId);
wxCouponPassword.setCouponId(record.getCouponId());
wxCouponPassword.setStatus(EnumCouponPasswordStatus.INIT.getCode());
List<WxCouponPassword> list = wxCouponPasswordMapper.findList(wxCouponPassword);
if (phoneSet.size() > list.size()) {
return new ResultData(ErrorCode.REMAIN_IS_EMPTY);
}
//添加记录
final IdWorker idWorker = IdWorker.get();
record.setId(idWorker.nextId());
record.setCouponName(wxCoupon.getTitle());
record.setSendAmount(phoneSet.size());
wxCouponPresentMapper.insert(record);
//小程序
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(tenantId);
String priceStr = wxCoupon.getPriceStr();
String name = appInfo.getName();
List<WxCouponPassword> tempList = wxCouponPasswordMapper.findList(wxCouponPassword);
//循环发送
int i = 0;
for (String phone : phoneSet) {
WxCouponPassword couponPassword = list.get(i);
//发送
sendMsg(tenantId, phone, priceStr, name, couponPassword.getPassword());
//记录发送数据便于更新状态
couponPassword.setSendedPhone(phone);
tempList.add(couponPassword);
i++;
}
//修改状态
wxCouponPasswordMapper.updateStatus(tempList);
return new ResultData();
}

private void sendMsg(String tenantId, String phone, String money, String appName, String password) {
logger.info("》》》》》》》》》》》");
logger.info("系统发卡发送短信开始");
logger.info("》》》》》》》》》》》");
Map<String, String> msgReplaceMap = new HashMap();
msgReplaceMap.put("app", appName);
msgReplaceMap.put("money", money);
msgReplaceMap.put("password", password);
WxMsgRecord wxMsgRecord = new WxMsgRecord();
wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode());
wxMsgRecord.setModelType(EnumMsgModel.COUPON_CARD_SEND.getCode());
wxMsgRecord.setReceiver(phone);
wxMsgRecord.setTenantId(tenantId);
wxMsgRecord.setDynamicContentMap(msgReplaceMap);
mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode());
logger.info("》》》》》》》》》》》");
logger.info("系统发卡发送短信结束");
logger.info("》》》》》》》》》》》");
}
}

+ 14
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java Просмотреть файл

@@ -64,6 +64,12 @@ import java.util.stream.Collectors;
@Autowired
WxCardInfoMapper wxCardInfoMapper;

@Autowired
WxCouponPasswordMapper couponPasswordMapper;

@Autowired
WxCouponPasswordService couponPasswordService;

@Override
public ResultData list(WxCoupon wxCoupon, Integer pageNum, Integer pageSize) {
if (null == wxCoupon) wxCoupon = new WxCoupon();
@@ -326,6 +332,11 @@ import java.util.stream.Collectors;
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
}

if (record.getPasswordSupport() != null && record.getPasswordSupport().equals(EnumCouponPasswordSupport.SUPPORTED.getCode())) {
// 如果用户启用卡密,生成数据并保存
couponPasswordService.mkPasswords(record.getTenantId(), record.getId(), record.getInventory());
}

record.setCreateDate(new Date());
record.setUpdateDate(new Date());
wxCouponMapper.insert(record);
@@ -408,9 +419,10 @@ import java.util.stream.Collectors;
wxScreenAdService.updateStatusByCouponId(record.getId(), record.getTenantId(), EnumScreenAdStatus.INVALID.getCode());
//下架拼团券
wxOrderService.updateOrderGroupStatusByCouponId(record.getId(), record.getTenantId(), EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode());
//修改卡状态
// 卡下架后,转赠找不到卡相关信息,所以修改卡转赠状态为不可转赠
wxCardInfoMapper.updateTransferStatusByCouponId(record.getId());

// 卡券下架,未使用的卡密要下架
couponPasswordMapper.updateStatusByCouponId(record.getId());
}
record.setUpdateDate(new Date());
wxCouponMapper.updateById(record);


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

@@ -4,10 +4,8 @@ import com.alibaba.fastjson.JSONArray;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iformall.common.IdWorker;
import com.iformall.domain.po.WxMsgCallback;
import com.iformall.domain.po.WxMsgConfig;
import com.iformall.domain.po.WxMsgModel;
import com.iformall.domain.po.WxMsgValidationcodeModel;
import com.iformall.domain.po.*;
import com.iformall.enums.EnumCouponPasswordStatus;
import com.iformall.enums.EnumMsgSendStatus;
import com.iformall.mapper.*;
import com.iformall.service.WxMsgCallbackService;
@@ -38,6 +36,9 @@ public class WxMsgCallbackServiceImpl implements WxMsgCallbackService {
@Autowired
WxMsgMapper wxMsgMapper;

@Autowired
WxCouponPasswordMapper wxCouponPasswordMapper;

@Override
public PageInfo<WxMsgCallback> listAsPage(WxMsgCallback record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxMsgCallbackMapper.findList(record));
@@ -93,6 +94,14 @@ public class WxMsgCallbackServiceImpl implements WxMsgCallbackService {
callback.setCallbackId(wxMsgCallback.getId());
callback.setUpdatetime(new Date());
wxMsgCallbackMapper.updateById(callback);
//更新业务
if (!callback.getBusinessId().equals(0L)) {
WxCouponPassword couponPassword = new WxCouponPassword();
couponPassword.setId(callback.getBusinessId());
couponPassword.setStatus(EnumCouponPasswordStatus.MSG_SENDED.getCode());
couponPassword.setUpdateDate(new Date());
wxCouponPasswordMapper.updateById(couponPassword);
}
}else{
Long callbackId = wxMsgCallback.getId();
wxMsgCallback.setId(idWorker.nextId());


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

@@ -6,8 +6,7 @@ import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxMsgCallback;
import com.iformall.domain.po.WxMsgValidationcode;
import com.iformall.domain.po.*;
import com.iformall.domain.po.msg.WxMsgRecord;
import com.iformall.enums.*;
import com.iformall.mapper.*;
@@ -15,6 +14,7 @@ import com.iformall.mq.MqBaseProducer;
import com.iformall.service.WxMsgValidationcodeService;
import com.iformall.utils.DateUtils;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -117,7 +117,7 @@ public class WxMsgValidationcodeServiceImpl implements WxMsgValidationcodeServic
}

@Override
public void addMsgCallback(WxMsgValidationcode wxmsg, String batchNo){
public void addMsgCallback(WxMsgValidationcode wxmsg, String batchNo, String id) {
logger.info("验证码发送时主动添加回调记录开始...");
String phone = wxmsg.getPhone();
final IdWorker idWorker = IdWorker.get();
@@ -129,6 +129,9 @@ public class WxMsgValidationcodeServiceImpl implements WxMsgValidationcodeServic
wxMsgCallback.setMsgId(wxmsg.getId());
wxMsgCallback.setStatus(EnumMsgSendStatus.MSG_SEND_FAIL.getCode());
wxMsgCallback.setCreatetime(new Date());
if (StringUtils.isNotEmpty(id)) {
wxMsgCallback.setBusinessId(Long.parseLong(id));
}
wxMsgCallbackMapper.insert(wxMsgCallback);
logger.info("验证码发送时主动添加回调记录结束...");
}


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

@@ -119,6 +119,8 @@ public class WxOrderServiceImpl implements WxOrderService {
@Autowired
private WxMsgLimitService wxMsgLimitService;

@Autowired
private WxCouponPasswordMapper couponPasswordMapper;

@Override
public PageInfo<WxOrder> listAsPage(WxOrder record, Integer pageIndex, Integer pageSize) {
@@ -637,7 +639,7 @@ public class WxOrderServiceImpl implements WxOrderService {
* @param order
* @param coupon
*/
private WxCouponOrder createCouponOrder(WxOrder order, WxCUser user, WxCoupon coupon) {
private WxCouponOrder createCouponOrder(WxOrder order, WxCUser user, WxCoupon coupon, Long couponPasswordId) {
Date curr = new Date();
Date valid_date = null;
int limit_days = Constant.WX_LIMIT_DAYS;
@@ -721,6 +723,12 @@ public class WxOrderServiceImpl implements WxOrderService {
cardInfo.setShareFeeAmount(0);
cardInfo.setRemainingShareFeeAmount(0);
cardInfo.setRateAmount(0);
if (coupon.getPasswordSupport().equals(EnumCouponPasswordSupport.SUPPORTED.getCode())) {
WxCouponPassword updateCPwd = new WxCouponPassword();
updateCPwd.setId(couponPasswordId);
updateCPwd.setStatus(EnumCouponPasswordStatus.USED.getCode());
couponPasswordMapper.updateById(updateCPwd);
}
}

cardInfo.setServiceFeeAmount(fee);
@@ -813,7 +821,7 @@ public class WxOrderServiceImpl implements WxOrderService {
// 创建couponOrder
WxCouponOrder couponOrder = null;
try {
couponOrder = createCouponOrder(record, user, coupon);
couponOrder = createCouponOrder(record, user, coupon, null);
} catch (Exception e) {
logger.error("保存订单:" + e.getMessage());
throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR.getCode(), coupon.getTitle() + ErrorCode.COUPON_ORDER_SAVE_ERR.getMessage());
@@ -860,7 +868,7 @@ public class WxOrderServiceImpl implements WxOrderService {

// 创建couponOrder
try {
createCouponOrder(updateOrder, user, coupon);
createCouponOrder(updateOrder, user, coupon, null);
} catch (Exception e) {
logger.error("创建券包:" + e.getMessage());
throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR);
@@ -1361,7 +1369,7 @@ public class WxOrderServiceImpl implements WxOrderService {
WxOrder order = null;
if (checkCouponIsFree(coupon)) {
// 免费券
order = saveFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId());
order = saveFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId(), null);
if(order != null) {
// 6. 下订单完成,发送内部消息
// 下订单完成,发送内部消息
@@ -1395,7 +1403,7 @@ public class WxOrderServiceImpl implements WxOrderService {

@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public WxOrder saveFreeOrderForCoupon(WxCUser user, WxCoupon coupon, Long couponChannelId, String formId) {
public WxOrder saveFreeOrderForCoupon(WxCUser user, WxCoupon coupon, Long couponChannelId, String formId, Long couponPasswordId) {
// 1. check user info and coupon info
userCouponMerchantCheck(user, coupon);
if (coupon.checkIsCreditCoupon()) {
@@ -1435,7 +1443,7 @@ public class WxOrderServiceImpl implements WxOrderService {

// 5. 创建couponOrder
try {
createCouponOrder(record, user, coupon);
createCouponOrder(record, user, coupon, couponPasswordId);
} catch (Exception e) {
logger.error("couponOrder失败:" + e.getMessage());
throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR);


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

@@ -56,7 +56,7 @@ public class SendSmsServiceImpl implements MsgSendService {
throw new MallinkException(ErrorCode.MSG_CONFIG_NOT_FOUND);
}
wxMsgConfig = wxMsgConfigs.get(0);
if(wxMsgConfig.getRemains() <=0l){
if (wxMsgConfig.getRemains() <= 0L) {
throw new MallinkException(ErrorCode.MSG_CONFIG_ACCOUNT);
}

@@ -106,9 +106,10 @@ public class SendSmsServiceImpl implements MsgSendService {
wxMsgValidationcode.setExpiretime(expiredate);
}
wxMsgValidationcodeMapper.insert(wxMsgValidationcode);
wxMsgValidationcodeService.addMsgCallback(wxMsgValidationcode,batchNo);
String id = record.getDynamicContentMap().get("id");
wxMsgValidationcodeService.addMsgCallback(wxMsgValidationcode, batchNo, id);
//扣减剩余条数
wxMsgConfig.setRemains(1l);
wxMsgConfig.setRemains(1L);
wxMsgConfigMapper.updateRemains(wxMsgConfig);
}else{
throw new MallinkException(1001,"运营商返回失败:"+result);


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

@@ -526,5 +526,8 @@
UPDATE wx_c_user_basic_info set act_record = act_record +1 where id = #{id}
</update>

<select id="selectNotCUserList" resultMap="BaseResultMap">
select id,credit from wx_c_user_basic_info cub where not exists (select * from wx_c_user c where c.id=cub.id) and cub.credit is null
</select>
</mapper>


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

@@ -43,6 +43,7 @@
<result column="cancle_apply_status" property="cancleApplyStatus"/>
<result column="conditions" jdbcType="VARCHAR" property="conditions"/>
<result column="approval_type" property="approvalType"/>
<result column="password_support" property="passwordSupport"/>
</resultMap>
<resultMap id="statisMap" type="com.iformall.domain.vo.WxCouponStatisVo">
<id column="id" jdbcType="BIGINT" property="id"/>


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

@@ -0,0 +1,143 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxCouponPasswordMapper">
<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxCouponPassword">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId" />
<result column="coupon_id" jdbcType="BIGINT" property="couponId" />
<result column="coupon_short" jdbcType="VARCHAR" property="couponShort" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="status" jdbcType="INTEGER" property="status" />
<result column="sended_phone" jdbcType="VARCHAR" property="sendedPhone" />
<result column="card_id" jdbcType="BIGINT" property="cardId" />
<result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate" />
<result column="expire_date" jdbcType="TIMESTAMP" property="expireDate" />
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`coupon_id`,`coupon_short`,`password`,`status`,`sended_phone`,`card_id`,`create_date`,`update_date`,`expire_date`
</sql>

<sql id="dynamicWhereConditions">
where 1 = 1
<if test=" null != id ">
and `id` = #{id}
</if>
<if test=" null != tenantId ">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != couponId ">
and `coupon_id` = #{couponId}
</if>
<if test=" null != couponShort ">
and `coupon_short` = #{couponShort}
</if>
<if test=" null != password ">
and `password` = #{password}
</if>
<if test=" null != status ">
and `status` = #{status}
</if>
<if test=" null != sendedPhone ">
and `sended_phone` = #{sendedPhone}
</if>
<if test=" null != cardId ">
and `card_id` = #{cardId}
</if>
<if test=" null != createDate ">
and `create_date` = #{createDate}
</if>
<if test=" null != updateDate ">
and `update_date` = #{updateDate}
</if>
<if test=" null != expireDate ">
and `expire_date` > #{expireDate}
</if>
<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != statusStr and ''!=statusStr">
and status in (${statusStr})
</if>
<if test=" null != sortColumns"> order by ${sortColumns} </if>
</sql>
<select id="findList" parameterType="com.iformall.domain.po.WxCouponPassword" resultMap="BaseResultMap">
select <include refid="allColumns" />
from wx_coupon_password
<include refid="dynamicWhereConditions" />
</select>

<select id="findAvaPasswordListByCouponId" parameterType="com.iformall.domain.po.WxCouponPassword" resultMap="BaseResultMap">
select <include refid="allColumns" />
from wx_coupon_password
<where> `status` not in (3,4)
<if test=" null != tenantId ">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != couponId ">
and `coupon_id` = #{couponId}
</if>
<if test=" null != expireDate ">
and `expire_date` > #{expireDate}
</if>
</where>
</select>

<insert id="insertCouponPasswds" parameterType="java.util.List">
INSERT INTO wx_coupon_password (`id`,`coupon_id`,`coupon_short`,`password`,`status`,`create_date`,`update_date`)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.id},#{item.couponId},#{item.couponShort},#{item.password},#{item.status},
#{item.createDate},#{item.updateDate}
)
</foreach>
</insert>

<update id="updateStatusByCouponId" parameterType="Long">
update wx_coupon_password
set status=4, update_date=now()
where status != 3 and tenant_id = #{tenantId} and coupon_id=#{couponId}
</update>

<select id="findCouponGroupList" parameterType="com.iformall.domain.po.WxCouponPassword" resultMap="BaseResultMap">
select `coupon_id`,`coupon_short`
from wx_coupon_password
where `tenant_id` = #{tenantId}
group by `coupon_id`,`coupon_short`
</select>
<resultMap id="CouponCountInfoMap" type="com.iformall.domain.vo.WxCouponPasswordCountInfoVO">
<result column="coupon_count" jdbcType="BIGINT" property="couponCount"/>
<result column="title" jdbcType="VARCHAR" property="couponName"/>
<result column="coupon_id" jdbcType="BIGINT" property="couponId"/>
</resultMap>
<select id="findCouponCountInfo" parameterType="com.iformall.domain.po.WxCouponPassword"
resultMap="CouponCountInfoMap">
select cp.coupon_id,c.title,cp.coupon_count from
(select count(*) as coupon_count,coupon_id from wx_coupon_password
where tenant_id#{tenantId} and status=0) cp
inner join wx_coupon c on cp.coupon_id = c.id
where c.tenant_id=#{tenantId} and c.status=1
<if test=" null != couponId ">
and cp.`coupon_id` = #{couponId}
</if>
group by cp.coupon_id
</select>
<update id="updateStatus" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
update wx_coupon_password set status=1,send_phone=#{sendPhone},update_date=now() where id = ${item.id}
</foreach>
</update>

</mapper>

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

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxCouponPresentMapper">
<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxCouponPresent">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
<result column="user_id" jdbcType="BIGINT" property="userId"/>
<result column="coupon_id" jdbcType="BIGINT" property="couponId"/>
<result column="coupon_name" jdbcType="VARCHAR" property="couponName"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="send_amount" jdbcType="INTEGER" property="sendAmount"/>
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`coupon_id`,`coupon_name`,`user_id`,`create_time`,`update_time`,`send_amount`
</sql>
<sql id="dynamicWhereConditions">
where 1 = 1
<if test=" null != id ">
and `id` = #{id}
</if>
<if test=" null != tenantId ">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != couponId ">
and `coupon_id` = #{couponId}
</if>
<if test=" null != couponName ">
and `coupon_name` like concat('%', #{couponName},'%')
</if>
<if test=" null != phones ">
and `phones` like concat('%', #{phones},'%')
</if>
<if test=" null != sendTimeStart and null!=sendTimeEnd ">
and `create_date` between #{sendTimeStart} and #{sendTimeEnd}
</if>
<if test=" null != updateTime ">
and `update_date` = #{updateTime}
</if>
<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns">order by ${sortColumns}</if>
</sql>
<select id="findList" parameterType="com.iformall.domain.po.WxCouponPresent" resultMap="BaseResultMap">
select
<include refid="allColumns"/>
from wx_coupon_present
<include refid="dynamicWhereConditions"/>
</select>

</mapper>

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

@@ -213,7 +213,7 @@
select credit.credit_amount as amount,credit.c_user_id from wx_credit_history credit
INNER join (select max(create_date) create_date,credit.c_user_id
from wx_credit_history credit group by credit.c_user_id) credit_max_id
on credit.create_date=credit_max_id.create_date
on credit.create_date=credit_max_id.create_date and credit.c_user_id=credit_max_id.c_user_id
INNER JOIN wx_c_user_basic_info basic ON basic.id = credit.c_user_id
LEFT JOIN wx_merchant merchant ON credit.merchant_id = merchant.id
<include refid="customWhereConditions"/>
@@ -253,4 +253,13 @@
select <include refid="allColumns" /> from wx_credit_history where create_date > #{dateTime} and credit_type = #{creditType}
</select>

<select id="findListByIds" parameterType="java.util.List" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_credit_history
where c_user_id in
<foreach collection="userIds" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
order by create_date desc
</select>

</mapper>

+ 70
- 2
mallinkSysAdmin/src/main/java/com/iformall/controller/sys/DataInitController.java Просмотреть файл

@@ -1,6 +1,8 @@
package com.iformall.controller.sys;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.base.Function;
import com.google.common.collect.*;
import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker;
import com.iformall.common.ResultData;
@@ -14,14 +16,17 @@ import com.iformall.mapper.*;
import com.iformall.service.WxCreditHistoryService;
import com.iformall.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.apache.commons.collections.CollectionUtils;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

/**
@@ -100,6 +105,28 @@ public class DataInitController extends BaseController {
return new ResultData();
}


/**
* 修复wx_c_user_basic_info积分数据
*
* @return
*/
@GetMapping("/fixCredit4CUserBasic")
public ResultData fixCredit4CUserBasic() {
try {
MallUserInfo userInfo = getUser();
if (userInfo.isFmSuperAdmin()) {
doFixCredit4CUserBasic();
return new ResultData();
}
} catch (Exception e) {
log.error("DataInitController::fixCredit4CUserBasic error ", e);
return new ResultData(ErrorCode.MSG_METHOD_REQUEST_ERROR, e.getMessage());
}

return new ResultData();
}

/**
* 核销积分数据修复
*
@@ -121,6 +148,47 @@ public class DataInitController extends BaseController {
return new ResultData();
}

@Transactional(rollbackFor = Exception.class)
public void doFixCredit4CUserBasic() {
log.debug("cUserBasic积分更新, begin --------------》");
// 1 查找c_user_basic中c_user不存在且积分为null的用户用户
List<WxCUserBasicInfo> userBasicInfoList = cUserBasicInfoMapper.selectNotCUserList();
List<Long> ids = userBasicInfoList.stream().map(WxCUserBasicInfo::getId).collect(Collectors.toList());
//log.debug("ids {}", JSON.toJSONString(ids));

// 2 获取对应用户的积分记录
List<WxCreditHistory> creditList = creditHistoryMapper.findListByIds(ids);
ImmutableListMultimap<Long, WxCreditHistory> userCreditHistory = Multimaps.index(creditList, new Function<WxCreditHistory, Long>() {
@Nullable
@Override
public Long apply(@Nullable WxCreditHistory input) {
return input.getCUserId();
}
});

//3 将历史记录最好积分重设积分
AtomicInteger count = new AtomicInteger(0);
userBasicInfoList.forEach(wxCUserBasicInfo -> {
ImmutableList<WxCreditHistory> historyList = userCreditHistory.get(wxCUserBasicInfo.getId());
WxCUserBasicInfo toUpdateUser = new WxCUserBasicInfo();
toUpdateUser.setId(wxCUserBasicInfo.getId());
//用户积分不存在,跳过
if (CollectionUtils.isEmpty(historyList)) {
//log.debug("cUserBasic积分更新,id: {} 积分记录不存在", wxCUserBasicInfo.getId());
return;
}
//积分记录存在,使用最新的总积分重新赋值
WxCreditHistory wxCreditHistory = historyList.get(0);
toUpdateUser.setCredit(wxCreditHistory.getCreditAmount());
cUserBasicInfoMapper.updateById(toUpdateUser);
log.debug("cUserBasic积分更新,id: {},原积分: {},新积分: {}, 积分时间: {}", wxCUserBasicInfo.getId(), wxCUserBasicInfo.getCredit(), toUpdateUser.getCredit(), DateUtils.format(wxCreditHistory.getCreateDate()));
count.getAndIncrement();
});

log.debug("cUserBasic积分更新,更新用户 {}", count.intValue());
log.debug("cUserBasic积分更新, end --------------》");
}

@Transactional(rollbackFor = Exception.class)
public void doFixCredit() {
// 1 获取积分记录
@@ -144,7 +212,7 @@ public class DataInitController extends BaseController {
return;
}
//根据商户id和花费金额计算需要新增的积分
Map<String, Integer> result = creditHistoryService.findByMerchantIdAndSpend(wxCreditHistory.getMerchantId(), String.valueOf(wxCreditHistory.getSpend()), wxCreditHistory.getCUserId(),wxCreditHistory.getTenantId());
Map<String, Integer> result = creditHistoryService.findByMerchantIdAndSpend(wxCreditHistory.getMerchantId(), String.valueOf(new BigDecimal(wxCreditHistory.getSpend()/100)), wxCreditHistory.getCUserId(),wxCreditHistory.getTenantId());

//Map<String, Integer> result = creditHistoryService.findByMerchantIdAndSpend(wxCreditHistory.getMerchantId(), String.valueOf(wxCreditHistory.getSpend()), wxCreditHistory.getCUserId(), wxCreditHistory.getTenantId());
Integer creditDB = wxCreditHistory.getCreditNum();


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