记得上下班打卡 | git大法好,push需谨慎

Commit da9e36ed authored by 张国柄's avatar 张国柄

+会员码管理;

parent 49aedc47
......@@ -4,12 +4,10 @@ import lombok.Data;
import java.io.Serializable;
//@ApiModel(value = "AdamMemberCodeListParam", description = "会员码列表入参")
@Data
public class AdamMemberCodeListParam implements Serializable {
private static final long serialVersionUID = -8454342033562304457L;
// @ApiModelProperty(required = false, value = "会员码批次号[64]")
private String batchNo;
// @ApiModelProperty(required = false, value = "状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]")
private String code;
private Integer state;
}
......@@ -18,6 +18,9 @@ import com.liquidnet.service.adam.dto.admin.AdamMemberCodeListParam;
import com.liquidnet.service.adam.entity.AdamMemberCode;
import com.liquidnet.service.adam.entity.AdamMemberCodeBatch;
import com.liquidnet.service.adam.entity.AdamMemberPrice;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
......@@ -28,7 +31,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
//@Api(tags = "会员码管理")
@Api(tags = "会员码管理")
@Controller
@RequestMapping("adam/mcode")
public class AdamMemberCodeAdminController extends BaseController {
......@@ -43,6 +46,18 @@ public class AdamMemberCodeAdminController extends BaseController {
@GetMapping("mgt")
public String viewCodeMgt(@RequestParam String memberId, ModelMap mmap) {
mmap.put("memberId", memberId);
AdamMemberPrice memberPrice = adamMemberPriceAdminService.getOne(Wrappers.lambdaQuery(AdamMemberPrice.class)
.eq(AdamMemberPrice::getState, 1)
.eq(AdamMemberPrice::getMemberId, memberId)
.select(
AdamMemberPrice::getMemberPriceId,
AdamMemberPrice::getPrice,
AdamMemberPrice::getPriceFixed,
AdamMemberPrice::getPriceSpecial,
AdamMemberPrice::getDays
)
);
mmap.put("memberPrice", memberPrice);
return prefix + "/code_mgt";
}
......@@ -67,10 +82,13 @@ public class AdamMemberCodeAdminController extends BaseController {
);
queryWrapper.orderByDesc(AdamMemberCodeBatch::getCreatedAt);
logger.info("update member_code_batch.use_num:{}", adamMemberCodeBatchAdminService.updateBatchUseNum());
this.startPage();
return getDataTable(adamMemberCodeBatchAdminService.list(queryWrapper));
}
// @ApiOperation(value = "会员码:创建")
@ApiOperation(value = "会员码:创建")
@RequiresPermissions("adam:member:code:creation")
@Log(title = "会员管理:会员码:创建", businessType = BusinessType.INSERT)
@PostMapping("mgt/creation")
......@@ -89,18 +107,19 @@ public class AdamMemberCodeAdminController extends BaseController {
return this.toAjax(adamMemberCodeAdminService.createGiftCode(parameter));
}
@GetMapping("view")
@GetMapping("mgt/code")
public String viewCode(@RequestParam String batchNo, ModelMap mmap) {
mmap.put("batchNo", batchNo);
return prefix + "/code";
}
// @ApiOperation(value = "会员码:列表")
@ApiOperation(value = "会员码:列表")
@RequiresPermissions("adam:member:code:list")
@Log(title = "会员管理:会员码:列表", businessType = BusinessType.LIST)
@PostMapping("list")
@ResponseBody
public TableDataInfo listCode(AdamMemberCodeListParam parameter) {
this.startPage();
return getDataTable(codeListQuery(parameter));
}
......@@ -109,19 +128,16 @@ public class AdamMemberCodeAdminController extends BaseController {
queryWrapper.eq(AdamMemberCode::getBatchNo, parameter.getBatchNo());
queryWrapper.eq(AdamMemberCode::getType, 2);
queryWrapper.ne(AdamMemberCode::getState, 2);
if (StringUtils.isNotBlank(parameter.getCode())) {
queryWrapper.eq(AdamMemberCode::getCode, parameter.getCode());
}
if (null != parameter.getState()) {
queryWrapper.eq(AdamMemberCode::getState, parameter.getState());
}
queryWrapper.select(
AdamMemberCode::getMemberNo,
AdamMemberCode::getCode,
AdamMemberCode::getState,
AdamMemberCode::getOperator,
AdamMemberCode::getCreatedAt,
AdamMemberCode::getValidity,
AdamMemberCode::getEffectAt,
AdamMemberCode::getExpireAt,
AdamMemberCode::getUseOrderNo,
AdamMemberCode::getUseUid,
AdamMemberCode::getUseAt
);
queryWrapper.orderByDesc(AdamMemberCode::getMemberNo);
......@@ -129,7 +145,7 @@ public class AdamMemberCodeAdminController extends BaseController {
return adamMemberCodeAdminService.list(queryWrapper);
}
// @ApiOperation(value = "会员码:导出")
@ApiOperation(value = "会员码:导出")
@RequiresPermissions("adam:member:code:export")
@Log(title = "会员管理:会员码:导出", businessType = BusinessType.EXPORT)
@PostMapping("export")
......
......@@ -11,9 +11,12 @@
<form id="data-form">
<div class="select-list">
<ul>
<input type="text" name="memberId" hidden="hidden" th:value="${memberId}" readonly/>
<li>
状态:<select name="state" th:with="type=${@dict.getType('zhengzai_coupon_code_state')}">
<label>会员码:</label>
<input type="text" name="code"/>
</li>
<li>
状态:<select name="state" th:with="type=${@dict.getType('zhengzai_member_code_state')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
......@@ -28,15 +31,9 @@
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="adam:member:export:code">
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="adam:member:code:export">
<i class="fa fa-download"></i> 导出
</a>
<!-- <a class="btn btn-primary multiple disabled" onclick="invalidHandler()" shiro:hasPermission="adam:member:invalid:code">-->
<!-- <i class="fa fa-edit"></i> 批量失效-->
<!-- </a>-->
<!-- <a class="btn btn-danger multiple disabled" onclick="recoverHandler()" shiro:hasPermission="adam:member:recover:code">-->
<!-- <i class="fa fa-remove"></i> 批量退回-->
<!-- </a>-->
</div>
<div class="col-sm-12 select-table table-striped">
......@@ -47,70 +44,44 @@
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
// var invalidFlag = [[${@permission.hasPermi('adam:member:code:invalid')}]];
// var recoverFlag = [[${@permission.hasPermi('adam:member:code:recover')}]];
var datas = [[${@dict.getType('zhengzai_coupon_code_state')}]];// 样例:[{"dictLabel":"未支付","dictValue":"0"},{"dictLabel":"已支付","dictValue":"1"},{"dictLabel":"已关闭","dictValue":"2"}]
var memberId = [[${memberId}]];
var datas = [[${@dict.getType('zhengzai_member_code_state')}]];// 样例:[{"dictLabel":"未支付","dictValue":"0"},{"dictLabel":"已支付","dictValue":"1"},{"dictLabel":"已关闭","dictValue":"2"}]
var batchNo = [[${batchNo}]];
var prefix = ctx + "adam/mcode";
$(function() {
var options = {
url: prefix + "/list",
exportUrl: prefix + "/export",
sortName: "code",
sortOrder: "asc",
modalName: "会员码",
url: prefix + "/list?batchNo=" + batchNo,
exportUrl: prefix + "/export?batchNo=" + batchNo,
sortName: "memberNo",
sortOrder: "desc",
modalName: "会员码列表",
columns: [
{
checkbox: true
},
{
field: 'code',
title: '会员码'
},
{
field: 'expireAt',
title: '到期时间'
},
{
field: 'useAt',
title: '使用时间'
field: 'memberNo',
title: '卡号'
},
{
field: 'useOrderNo',
title: '兑换订单号',
formatter: function(value, row, index) {
var actions = [];
if ($.common.isEmpty(value)) {
actions.push('<a href="javascript:void(0)">-</a>');
} else {
actions.push('<a href="javascript:void(0)" onclick="$.operate.detailTab(\'' + value + '\')">' + value + '</a>');
}
return actions.join('');
}
field: 'code',
title: '会员码'
},
{
field: 'state',
title: '状态',
title: '使用状态',
align: 'center',
formatter: function(value, row, index) {
return $.table.selectDictLabel(datas, value);
}
},
// {
// title: '操作',
// align: 'center',
// formatter: function(value, row, index) {
// var actions = [];
// if (row.state === 0) {
// actions.push('<a class="btn btn-primary btn-xs ' + (invalidFlag && row.state===0) + '" href="javascript:void(0)" onclick="invalidHandler(\'' + row.code + '\')"><i class="fa fa-edit"></i>失效</a> ');
// } else if (row.state === 1) {
// // actions.push('<a class="btn btn-danger btn-xs ' + (recoverFlag && row.state==0) + '" href="javascript:void(0)" onclick="recoverHandler(\'' + row.code + '\')"><i class="fa fa-remove"></i>退回</a>');
// }
// return actions.join('');
// }
// }
{
field: 'useAt',
title: '使用时间',
formatter: function (value, row, index) {
return $.common.sprintf("<span>%s</span>", null != value ? value.replace("T"," ").substring(0, 19) : value);
}
}
]
};
$.table.init(options);
......@@ -119,30 +90,6 @@
function resetPre() {
$.form.reset();
}
// function invalidHandler(code) {
// let invalidCodeUrl = prefix + '/invalid_code';
// if (code !== null && code !== undefined) {
// var data = {"memberId": memberId,"codes": code};
// $.operate.submit(invalidCodeUrl, "post", "json", data);
// } else {
// var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
// var data = {"memberId": memberId, "codes": rows.join()};
// $.operate.batchProcessing(invalidCodeUrl, '失效', data);
// }
// }
//
// function recoverHandler(code) {
// let recoverCodeUrl = prefix + '/recover_code';
// if (code !== null && code !== undefined) {
// var data = {"memberId": memberId,"codes": code};
// $.operate.submit(recoverCodeUrl, "post", "json", data);
// } else {
// var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
// var data = {"memberId": memberId, "codes": rows.join()};
// $.operate.batchProcessing(recoverCodeUrl, '失效', data);
// }
// }
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('创建会员码')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-code-add">
<input >
<div class="form-group">
<label class="col-sm-3 control-label is-required">生产数量:</label>
<div class="col-sm-8">
<input class="form-control" type="text" name="genNum" id="genNum" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">备注:</label>
<div class="col-sm-8">
<textarea id="remark" name="detail" class="form-control"></textarea>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
var prefix = ctx + "system/dict";
$("#form-code-add").validate({
onkeyup: false,
rules:{
dictType:{
minlength: 5,
remote: {
url: prefix + "/checkDictTypeUnique",
type: "post",
dataType: "json",
data: {
name : function() {
return $.common.trim($("#dictType").val());
}
},
dataFilter: function(data, type) {
return $.validate.unique(data);
}
}
},
},
messages: {
"dictType": {
remote: "该字典类型已经存在"
}
},
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-code-add').serialize());
}
}
</script>
</body>
</html>
......@@ -8,7 +8,7 @@
<div class="container-div">
<div class="row">
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="adam:member:code:creation">
<a class="btn btn-success" href="#member-gencode-form" data-toggle="modal" shiro:hasPermission="adam:member:code:creation">
<i class="fa fa-plus"></i> 创建
</a>
</div>
......@@ -16,59 +16,97 @@
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
<div id="member-gencode-form" class="modal fade" aria-hidden="true">
<div class="modal-dialog" style="width:33%;">
<div class="modal-content modal-body row">
<h3 class="m-t-none m-b text-center">创建会员码</h3>
<form role="form" id="form-member-code-generate">
<input name="memberId" type="hidden" th:value="${memberId}" readonly>
<input name="memberPriceId" type="hidden" th:value="${memberPrice.memberPriceId}" readonly>
<div class="form-group">
<label class="pull-left">生产数量:</label>
<input type="number" name="genNum" class="form-control" style="width: 30%;height: 20px;" placeholder="生产数量">
</div>
<div class="form-group">
<!-- <label>备注:</label>-->
<textarea rows="3" name="detail" placeholder="备注描述" class="form-control"></textarea>
</div>
<div class="text-center" style="margin-bottom: -15px;margin-top: 10px;">
<button class="btn btn-sm btn-primary m-t-n-xs" type="button" onclick="memberCodeGenerate()">
<strong>确认创建</strong>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
var viewMemberCodeListFlg = [[${@permission.hasPermi('adam:member:code:list')}]];
var memberId = [[${memberId}]];
var prefix = ctx + "adam/mcode";
$(function() {
var options = {
url: prefix + "/mgt/list?memberId=" + memberId,
createUrl: prefix + "/mgt/creation/{id}",
exportUrl: prefix + "/export_code",
detailUrl: ctx + "adam/order/orderList/detail/{id}",
sortName: "code",
sortOrder: "asc",
sortName: "createdAt",
sortOrder: "desc",
modalName: "会员码创建记录",
columns: [{
checkbox: true
},
{
field: 'memberName',
title: '会员名称'
title: '会员名称',
width: 220
},
{
field: 'memberCombo',
title: '会员套餐名称'
title: '会员套餐名称',
width: 180
},
{
field: 'genNum',
title: '生产数量'
title: '生产数量',
width: 80
},
{
field: 'useNum',
title: '使用数量'
title: '使用数量',
width: 80
},
{
field: 'detail',
title: '备注'
title: '备注',
width: 280
},
{
field: 'operator',
title: '创建人'
title: '创建人',
width: 100
},
{
field: 'createdAt',
title: '创建时间'
title: '创建时间',
width: 150,
formatter: function (value, row, index) {
return $.common.sprintf("<span>%s</span>", null != value ? value.replace("T"," ").substring(0, 19) : value);
}
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-primary btn-xs ' + (invalidFlag && row.state===0) + '" href="javascript:void(0)" onclick="memberCodeList(\'' + row.batchNo + '\')"><i class="fa fa-edit"></i>查看码列表</a> ');
actions.push('<a class="btn btn-primary btn-xs ' + viewMemberCodeListFlg + '" href="javascript:void(0)" onclick="memberCodeList(\'' + row.batchNo + '\')"><i class="fa fa-list-ul"></i>查看码列表</a> ');
return actions.join('');
}
}]
......@@ -78,7 +116,57 @@
/* 会员码列表 */
function memberCodeList(batchNo) {
$.modal.openTab("会员码列表", 'adam/mcode/view?batchNo=' + batchNo);
$.modal.openTab("会员码列表", prefix + '/mgt/code?batchNo=' + batchNo);
}
$("#form-member-code-generate").validate({
onkeyup: false,
rules:{
genNum: {
required: true,
number: true,
min: 1,
max: 100
},
detail: {
required: true,
minlength: 2,
maxlength: 100
}
},
messages: {
genNum: {
required: "请输入生产数量",
number: "生产数量必须为数字",
min: "生产数量不能小于1",
max: "生产数量不能大于100"
},
detail: {
required: "请输入备注描述",
minlength: "备注描述不得少于2个字符",
maxlength: "备注描述不得大于100个字符"
}
},
focusCleanup: true
});
function memberCodeGenerate() {
if ($.validate.form("form-member-code-generate")) {
$.operate.saveModal(prefix + "/mgt/creation", $('#form-member-code-generate').serialize(), memberCodeGenerateCallback);
}
}
function memberCodeGenerateCallback(result) {
if (typeof callback == "function") {
callback(result);
}
if (result.code == web_status.SUCCESS) {
$.modal.alertSuccess(result.msg);
setTimeout("refreshTab()", 1500);
} else if (result.code == web_status.WARNING) {
$.modal.alertWarning(result.msg);
} else {
$.modal.alertError(result.msg);
}
}
</script>
</body>
......
......@@ -39,9 +39,10 @@
field: 'icon',
title: 'ICON',
formatter: function (value, row, index) {
var actions = [];
actions.push($.common.sprintf("<img class='img-circle img-xs' src='%s' />", value));
return actions;
// var actions = [];
// actions.push($.common.sprintf("<img class='img-circle img-xs' src='%s' />", value));
// return actions;
return $.table.imageView(value);
}
},
{
......@@ -77,7 +78,7 @@
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.editTab(\'' + row.memberId + '\'); setVipTabs()"><i class="fa fa-edit"></i>编辑</a> ');
// actions.push('<a class="btn btn-success btn-xs ' + viewMemberCodeMgtFlag + '" href="javascript:void(0)" onclick="memberCodeMgt(\'' + row.memberId + '\')"><i class="fa fa-edit"></i>会员码管理</a> ');
actions.push('<a class="btn btn-warning btn-xs ' + viewMemberCodeMgtFlag + '" href="javascript:void(0)" onclick="memberCodeMgt(\'' + row.memberId + '\')"><i class="fa fa-barcode"></i>会员码管理</a> ');
return actions.join('');
}
}]
......
......@@ -2,7 +2,7 @@
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('会员订单详情')" />
<style type="text/css">.user-info-head{position:relative;display:inline-block;}.user-info-head:hover:after{content:'\f030';position:absolute;left:0;right:0;top:0;bottom:0;color:#eee;background:rgba(0,0,0,0.5);font-family:FontAwesome;font-size:24px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;cursor:pointer;line-height:110px;border-radius:50%;}</style>
<!-- <style type="text/css">.user-info-head{position:relative;display:inline-block;}.user-info-head:hover:after{content:'\f030';position:absolute;left:0;right:0;top:0;bottom:0;color:#eee;background:rgba(0,0,0,0.5);font-family:FontAwesome;font-size:24px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;cursor:pointer;line-height:110px;border-radius:50%;}</style>-->
</head>
<body class="gray-bg" style="font: 14px Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif !important;">
......@@ -185,7 +185,7 @@
var pricePaid = [[${orderDetailsVo.adamMemberOrderVo.pricePaid}]];
$("#form-member-order-refund").validate({
onkeyup: true,
onkeyup: false,
rules:{
refundAmt: {
required: true,
......
......@@ -10,19 +10,15 @@ import java.io.Serializable;
@Data
public class AdamMemberCodeExcelDto implements Serializable, Cloneable {
private static final long serialVersionUID = -6775626480969657499L;
@Excel(name = "会员码")
@Excel(name = "卡号")
private String memberNo;
@Excel(name = "会员码", width = 30)
private String code;
@Excel(name = "状态")
private Integer state;
@Excel(name = "用户UID")
private String useUid;
@Excel(name = "生效时间", width = 30)
private String effectAt;
@Excel(name = "过期时间", width = 30)
private String expireAt;
@Excel(name = "批次号")
private String memberId;
@Excel(name = "使用状态")
private String state;
@Excel(name = "使用时间", width = 30)
private String useAt;
private static final AdamMemberCodeExcelDto obj = new AdamMemberCodeExcelDto();
public static AdamMemberCodeExcelDto getNew() {
......@@ -35,12 +31,10 @@ public class AdamMemberCodeExcelDto implements Serializable, Cloneable {
public AdamMemberCodeExcelDto copy(AdamMemberCode source) {
if (null == source) return this;
this.setMemberNo(source.getMemberNo());
this.setCode(source.getCode());
this.setState(source.getState());
this.setUseUid(source.getUseUid());
this.setEffectAt(DateUtil.Formatter.yyyyMMddHHmmss.format(source.getEffectAt()));
this.setExpireAt(DateUtil.Formatter.yyyyMMddHHmmss.format(source.getExpireAt()));
this.setMemberId(source.getMemberId());
this.setState(source.getState() == 0 ? "可用" : "已用");
this.setUseAt(DateUtil.Formatter.yyyyMMddHHmmss.format(source.getUseAt()));
return this;
}
}
......@@ -4,4 +4,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.adam.entity.AdamMemberCodeBatch;
public interface IAdamMemberCodeBatchAdminService extends IService<AdamMemberCodeBatch> {
int updateBatchUseNum();
}
......@@ -2,16 +2,24 @@ package com.liquidnet.client.admin.zhengzai.adam.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberCodeAdminService;
import com.liquidnet.common.cache.redis.util.AbstractRedisUtil;
import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.admin.AdamMemberCodeGenParam;
import com.liquidnet.service.adam.dto.vo.AdamMemberCodeVo;
import com.liquidnet.service.adam.entity.AdamMember;
import com.liquidnet.service.adam.entity.AdamMemberCode;
import com.liquidnet.service.adam.entity.AdamMemberCodeBatch;
import com.liquidnet.service.adam.entity.AdamMemberPrice;
import com.liquidnet.service.adam.mapper.AdamMemberCodeBatchMapper;
import com.liquidnet.service.adam.mapper.AdamMemberCodeMapper;
import com.liquidnet.service.adam.mapper.AdamMemberMapper;
import com.liquidnet.service.adam.mapper.AdamMemberPriceMapper;
import com.liquidnet.service.adam.util.MemberUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -26,16 +34,24 @@ import java.util.regex.Pattern;
@Service
public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMapper, AdamMemberCode> implements IAdamMemberCodeAdminService {
@Autowired
AdamMemberCodeMapper memberCodeMapper;
AdamMemberCodeMapper adamMemberCodeMapper;
@Autowired
RedisDataSourceUtil redisDataSourceUtil;
@Autowired
AdamMemberMapper adamMemberMapper;
@Autowired
AdamMemberPriceMapper adamMemberPriceMapper;
@Autowired
AdamMemberCodeBatchMapper adamMemberCodeBatchMapper;
@Override
public boolean createGiftCode(AdamMemberCodeGenParam param) {
String loginName = ShiroUtils.getLoginName();
List<AdamMemberCode> memberCodeList = new ArrayList<>();
ArrayList<String> codeList = CollectionUtil.arrayListString();
Integer genNum = param.getGenNum();
LocalDateTime now = LocalDateTime.now();
String batchNo = IDGenerator.nextMilliId2();
AbstractRedisUtil redisAdamUtil = redisDataSourceUtil.getRedisAdamUtil();
for (int i = 0; i < genNum; i++) {
String mCode;
......@@ -48,15 +64,17 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa
AdamMemberCode initMemberCode = new AdamMemberCode();
initMemberCode.setCode(mCode);
initMemberCode.setType(1);
initMemberCode.setType(2);
initMemberCode.setBatchNo(batchNo);
initMemberCode.setMemberId(param.getMemberId());
initMemberCode.setMemberPriceId(param.getMemberPriceId());
// 需要主动生成会员编号
//initMemberCode.setMemberNo(getNextMemberNo(param.getMemberId()));
initMemberCode.setState(0);// 状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]
// 需要主动生成会员编号,这里暂不生产,待数据记录成功同步RDS时生产
// initMemberCode.setMemberNo(getNextMemberNo(param.getMemberId()));
initMemberCode.setState(0);// 0-可用|1-已用
// initMemberCode.setValidity(param.getValidity());
// initMemberCode.setEffectAt(now);
// initMemberCode.setExpireAt(now.plusDays(param.getValidity()).withHour(23).withMinute(59).withSecond(59));
initMemberCode.setOperator(loginName);
initMemberCode.setCreatedAt(now);
memberCodeList.add(initMemberCode);
......@@ -65,16 +83,43 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa
//redisDataSourceUtil.getRedisAdamUtil().set(AdamRedisConst.INFO_MEMBER_CODE.concat(mCode), AdamMemberCodeVo.getNew().copy(initMemberCode));
}
if (this.saveBatch(memberCodeList, memberCodeList.size())) {
AdamMember member = adamMemberMapper.selectOne(
Wrappers.lambdaQuery(AdamMember.class).eq(AdamMember::getMemberId, param.getMemberId())
.select(AdamMember::getName)
);
AdamMemberPrice memberPrice = adamMemberPriceMapper.selectOne(
Wrappers.lambdaQuery(AdamMemberPrice.class)
.eq(AdamMemberPrice::getMemberPriceId, param.getMemberPriceId())
.eq(AdamMemberPrice::getMemberId, param.getMemberId())
.eq(AdamMemberPrice::getState, 1)
.select(AdamMemberPrice::getName)
);
AdamMemberCodeBatch memberCodeBatch = new AdamMemberCodeBatch();
memberCodeBatch.setBatchNo(batchNo);
memberCodeBatch.setMemberId(param.getMemberId());
memberCodeBatch.setMemberPriceId(param.getMemberPriceId());
memberCodeBatch.setMemberName(member.getName());
memberCodeBatch.setMemberCombo(memberPrice.getName());
memberCodeBatch.setGenNum(genNum);
memberCodeBatch.setUseNum(0);
memberCodeBatch.setDetail(param.getDetail());
memberCodeBatch.setState(1);
memberCodeBatch.setOperator(loginName);
memberCodeBatch.setCreatedAt(now);
if (adamMemberCodeBatchMapper.insert(memberCodeBatch) > 0 && this.saveBatch(memberCodeList, memberCodeList.size())) {
List<AdamMemberCode> list = this.list(
Wrappers.lambdaQuery(AdamMemberCode.class).in(AdamMemberCode::getCode, codeList)
.eq(AdamMemberCode::getState, 0).eq(AdamMemberCode::getCreatedAt, now)
Wrappers.lambdaQuery(AdamMemberCode.class)
.in(AdamMemberCode::getCode, codeList)
.eq(AdamMemberCode::getState, 0)
.eq(AdamMemberCode::getBatchNo, batchNo)
// .select(AdamMemberCode::getMid, AdamMemberCode::getCode)
);
list.forEach(r -> {
r.setMemberNo(getNextMemberNo(param.getMemberId()));
for (AdamMemberCode memberCode : list) {
memberCode.setMemberNo(getNextMemberNo(param.getMemberId()));
redisAdamUtil.set(AdamRedisConst.INFO_MEMBER_CODE.concat(r.getCode()), AdamMemberCodeVo.getNew().copy(r));
});
redisAdamUtil.set(AdamRedisConst.INFO_MEMBER_CODE.concat(memberCode.getCode()), AdamMemberCodeVo.getNew().copy(memberCode));
}
this.updateBatchById(list, list.size());
return true;
}
......
......@@ -5,9 +5,17 @@ import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberCodeBatchAdmi
import com.liquidnet.service.adam.entity.AdamMemberCodeBatch;
import com.liquidnet.service.adam.mapper.AdamMemberCodeBatchMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class AdamMemberCodeBatchAdminServiceImpl extends ServiceImpl<AdamMemberCodeBatchMapper, AdamMemberCodeBatch> implements IAdamMemberCodeBatchAdminService {
@Autowired
AdamMemberCodeBatchMapper adamMemberCodeBatchMapper;
@Override
public int updateBatchUseNum() {
return adamMemberCodeBatchMapper.updateUseNum();
}
}
......@@ -16,11 +16,6 @@ public class AdamMemberCode {
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 会员码批次号
*/
private String batchNo;
/**
* 会员码
*/
......@@ -29,6 +24,10 @@ public class AdamMemberCode {
* 类型:1-购买,2-赠送(后台生成)
*/
private Integer type;
/**
* 会员码批次号
*/
private String batchNo;
/**
* 会员类型id
*/
......
......@@ -2,6 +2,7 @@ package com.liquidnet.service.adam.mapper;
import com.liquidnet.service.adam.entity.AdamMemberCodeBatch;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Update;
/**
* <p>
......@@ -13,4 +14,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface AdamMemberCodeBatchMapper extends BaseMapper<AdamMemberCodeBatch> {
@Update("update adam_member_code_batch amcb\n" +
" inner join (\n" +
" select batch_no, count(1) ct from adam_member_code where batch_no is not null and state = 1 group by batch_no\n" +
" ) t on amcb.batch_no = t.batch_no\n" +
"set amcb.use_num=t.ct, amcb.updated_at=sysdate()\n" +
"where amcb.state = 1 and amcb.gen_num <> amcb.use_num")
int updateUseNum();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment