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

Commit 470448a7 authored by jiangxiulong's avatar jiangxiulong

Merge remote-tracking branch 'origin/new_member' into new_member

parents d9f7ffc1 831616ff
package com.liquidnet.service.adam.dto.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
......@@ -10,22 +8,17 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@ApiModel(value = "AdamMemberCodeListParam", description = "会员码列表入参")
@Data
public class AdamMemberCodeGenParam implements Serializable {
private static final long serialVersionUID = 7212595876649709617L;
@NotBlank(message = "会员类型ID不能为空")
@ApiModelProperty(required = true, value = "会员类型ID[64]", example = "1")
private String memberId;
@NotBlank(message = "会员价格ID不能为空")
@ApiModelProperty(required = true, value = "会员价格ID[64]", example = "1")
private String memberPriceId;
@NotNull(message = "有效期不能为空")
@ApiModelProperty(required = true, value = "有效期", example = "30")
private Integer validity;
@NotNull(message = "生成数量不能为空")
@Min(1)
@Max(100)
@ApiModelProperty(required = true, value = "生成数量[1-100]", example = "1")
private Integer genNum;
@NotBlank(message = "备注描述不能为空")
private String detail;
}
package com.liquidnet.service.adam.dto.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "AdamMemberCodeListParam", description = "会员码列表入参")
//@ApiModel(value = "AdamMemberCodeListParam", description = "会员码列表入参")
@Data
public class AdamMemberCodeListParam implements Serializable {
private static final long serialVersionUID = -8454342033562304457L;
@ApiModelProperty(required = false, value = "会员类型ID[64]")
private String memberId;
@ApiModelProperty(required = false, value = "状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]")
// @ApiModelProperty(required = false, value = "会员码批次号[64]")
private String batchNo;
// @ApiModelProperty(required = false, value = "状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]")
private Integer state;
}
......@@ -10,10 +10,12 @@ import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@ApiModel(value = "AdamMemberCodeAdminVo", description = "会员码兑换")
@ApiModel(value = "AdamMemberCodeVo", description = "会员兑换码")
@Data
public class AdamMemberCodeVo implements Serializable, Cloneable {
private static final long serialVersionUID = -2822442493419088086L;
@ApiModelProperty(position = 0, value = "会员码批次号")
private String batchNo;
@ApiModelProperty(position = 0, value = "会员码")
private String code;
@ApiModelProperty(position = 1, value = "会员类型id")
......
......@@ -91,6 +91,7 @@ public class AdamMemberAdminController extends BaseController {
AdamMember::getInterestsDetail,
AdamMember::getNotes,
AdamMember::getType,
AdamMember::getOnsale,
AdamMember::getIntegralRate
)
);
......
package com.liquidnet.client.admin.web.controller.zhengzai.adam;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.common.utils.poi.ExcelUtil;
import com.liquidnet.client.admin.zhengzai.adam.dto.AdamMemberCodeExcelDto;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberCodeAdminService;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberCodeBatchAdminService;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberPriceAdminService;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.admin.AdamMemberCodeGenParam;
import com.liquidnet.service.adam.dto.admin.AdamMemberCodeListParam;
import com.liquidnet.service.adam.dto.admin.AdamMemberCodeOptParam;
import com.liquidnet.service.adam.dto.vo.AdamMemberCodeVo;
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.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Api(tags = "会员码管理")
//@Api(tags = "会员码管理")
@Controller
@RequestMapping("adam/mcode")
public class AdamMemberCodeAdminController extends BaseController {
private final String prefix = "zhengzai/adam/member/code";
@Autowired
IAdamMemberCodeBatchAdminService adamMemberCodeBatchAdminService;
@Autowired
IAdamMemberCodeAdminService adamMemberCodeAdminService;
@Autowired
IAdamMemberPriceAdminService adamMemberPriceAdminService;
......@@ -49,34 +43,65 @@ public class AdamMemberCodeAdminController extends BaseController {
@Autowired
RedisUtil redisUtil;
@GetMapping("code/mgt")
@GetMapping("mgt")
public String viewCodeMgt(@RequestParam String memberId, ModelMap mmap) {
mmap.put("memberId", memberId);
return prefix + "/code_mgt";
}
@ApiOperation(value = "会员码:管理")
@RequiresPermissions("adam:member:code:mgt:list")
@Log(title = "会员管理:会员码:管理", businessType = BusinessType.LIST)
@PostMapping("code/mgt/list")
@PostMapping("mgt/list")
@ResponseBody
public TableDataInfo listCodeMgt(@RequestParam String memberId) {
// TODO: 2021/9/23 码生成记录
LambdaQueryWrapper<AdamMemberCodeBatch> queryWrapper = Wrappers.lambdaQuery(AdamMemberCodeBatch.class);
queryWrapper.eq(AdamMemberCodeBatch::getState, 1);
queryWrapper.select(
AdamMemberCodeBatch::getBatchNo,
AdamMemberCodeBatch::getMemberName,
AdamMemberCodeBatch::getMemberCombo,
AdamMemberCodeBatch::getGenNum,
AdamMemberCodeBatch::getUseNum,
AdamMemberCodeBatch::getDetail,
AdamMemberCodeBatch::getOperator,
AdamMemberCodeBatch::getCreatedAt
);
queryWrapper.orderByDesc(AdamMemberCodeBatch::getCreatedAt);
return getDataTable(null);
return getDataTable(adamMemberCodeBatchAdminService.list(queryWrapper));
}
@GetMapping("code/view")
public String viewCode(@RequestParam String memberId, @RequestParam String batchNo, ModelMap mmap) {
mmap.put("memberId", memberId);
// @ApiOperation(value = "会员码:创建")
@RequiresPermissions("adam:member:code:creation")
@Log(title = "会员管理:会员码:创建", businessType = BusinessType.INSERT)
@PostMapping("mgt/creation")
@ResponseBody
public AjaxResult creationCodeMgt(@Validated AdamMemberCodeGenParam parameter) {
int count = adamMemberPriceAdminService.count(
Wrappers.lambdaQuery(AdamMemberPrice.class)
.eq(AdamMemberPrice::getMemberPriceId, parameter.getMemberPriceId())
.eq(AdamMemberPrice::getMemberId, parameter.getMemberId())
.eq(AdamMemberPrice::getState, 1)
);
if (count <= 0) {
logger.warn("会员卡ID/价格ID无效[{}]", parameter);
return this.error("会员卡ID/价格ID无效");
}
return this.toAjax(adamMemberCodeAdminService.createGiftCode(parameter));
}
@GetMapping("view")
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("code/list")
@PostMapping("list")
@ResponseBody
public TableDataInfo listCode(AdamMemberCodeListParam parameter) {
return getDataTable(codeListQuery(parameter));
......@@ -84,7 +109,7 @@ public class AdamMemberCodeAdminController extends BaseController {
private List<AdamMemberCode> codeListQuery(AdamMemberCodeListParam parameter) {
LambdaQueryWrapper<AdamMemberCode> queryWrapper = Wrappers.lambdaQuery(AdamMemberCode.class).orderByDesc(AdamMemberCode::getCreatedAt);
queryWrapper.eq(AdamMemberCode::getMemberId, parameter.getMemberId());
queryWrapper.eq(AdamMemberCode::getBatchNo, parameter.getBatchNo());
queryWrapper.eq(AdamMemberCode::getType, 2);
queryWrapper.ne(AdamMemberCode::getState, 2);
if (null != parameter.getState()) {
......@@ -107,10 +132,10 @@ public class AdamMemberCodeAdminController extends BaseController {
return adamMemberCodeAdminService.list(queryWrapper);
}
@ApiOperation(value = "会员码:导出")
// @ApiOperation(value = "会员码:导出")
@RequiresPermissions("adam:member:code:export")
@Log(title = "会员管理:会员码:导出", businessType = BusinessType.EXPORT)
@PostMapping("code/export")
@PostMapping("export")
@ResponseBody
public AjaxResult exportCode(AdamMemberCodeListParam parameter) {
List<AdamMemberCode> list = codeListQuery(parameter);
......@@ -122,78 +147,59 @@ public class AdamMemberCodeAdminController extends BaseController {
});
return excelUtil.exportExcel(excelList, "会员码数据");
}
@ApiOperation(value = "会员码:生成")
@RequiresPermissions("adam:member:code:gen")
@Log(title = "会员管理:会员码:生成", businessType = BusinessType.INSERT)
@PostMapping("code/gen")
@ResponseBody
public AjaxResult genCode(@Validated AdamMemberCodeGenParam parameter) {
int count = adamMemberPriceAdminService.count(
Wrappers.lambdaQuery(AdamMemberPrice.class)
.eq(AdamMemberPrice::getMemberPriceId, parameter.getMemberPriceId())
.eq(AdamMemberPrice::getMemberId, parameter.getMemberId())
.eq(AdamMemberPrice::getState, 1)
);
if (count <= 0) {
logger.warn("会员卡ID/价格ID无效[{}]", parameter);
return this.error("会员卡ID/价格ID无效");
}
return this.toAjax(adamMemberCodeAdminService.createGiftCode(parameter));
}
@RequiresPermissions("adam:member:code:invalid")
@Log(title = "会员管理:会员码:失效", businessType = BusinessType.UPDATE)
@PostMapping("invalid_code")
@ResponseBody
public AjaxResult invalid(AdamMemberCodeOptParam optParam) {
return toAjax(this.invalidRecoverCode(optParam, 4));
}
/**
* 失效|退回会员兑换码
*
* @param optParam AdamMemberCodeOptParam
* @param state 状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]
* @return boolean
*/
private boolean invalidRecoverCode(AdamMemberCodeOptParam optParam, int state) {
String loginName = ShiroUtils.getLoginName();
LocalDateTime now = LocalDateTime.now();
logger.info("by:{},optParam:{},state:{}", loginName, optParam, state);
int beforeState = state == 4 ? 0 : (state == 5 ? 1 : -1);
ArrayList<String> updateCodeList = CollectionUtil.arrayListString();
optParam.getCodes().forEach(r -> {
String key = AdamRedisConst.INFO_MEMBER_CODE.concat(r);
AdamMemberCodeVo vo = (AdamMemberCodeVo) redisUtil.get(key);
if (null != vo && vo.getState() == beforeState) {
redisUtil.del(key);
updateCodeList.add(vo.getCode());
}
});
if (!CollectionUtils.isEmpty(updateCodeList)) {
LambdaUpdateWrapper<AdamMemberCode> memberCodeUpdateWrapper = Wrappers.lambdaUpdate(AdamMemberCode.class);
memberCodeUpdateWrapper.eq(AdamMemberCode::getMemberId, optParam.getMemberId());
memberCodeUpdateWrapper.eq(AdamMemberCode::getState, beforeState);
memberCodeUpdateWrapper.in(AdamMemberCode::getCode, updateCodeList);
memberCodeUpdateWrapper.set(AdamMemberCode::getState, state);
memberCodeUpdateWrapper.set(AdamMemberCode::getOperator, loginName);
memberCodeUpdateWrapper.set(AdamMemberCode::getUpdatedAt, now);
return adamMemberCodeAdminService.update(memberCodeUpdateWrapper);
}
return false;
}
@RequiresPermissions("adam:member:code:recover")
@Log(title = "会员管理:会员码:退回", businessType = BusinessType.UPDATE)
@PostMapping("recover_code")
@ResponseBody
public AjaxResult recover(AdamMemberCodeOptParam optParam) {
return toAjax(this.invalidRecoverCode(optParam, 5));
}
//
// @RequiresPermissions("adam:member:code:invalid")
// @Log(title = "会员管理:会员码:失效", businessType = BusinessType.UPDATE)
// @PostMapping("invalid")
// @ResponseBody
// public AjaxResult invalid(AdamMemberCodeOptParam optParam) {
// return toAjax(this.invalidRecoverCode(optParam, 4));
// }
//
// /**
// * 失效|退回会员兑换码
// *
// * @param optParam AdamMemberCodeOptParam
// * @param state 状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]
// * @return boolean
// */
// private boolean invalidRecoverCode(AdamMemberCodeOptParam optParam, int state) {
// String loginName = ShiroUtils.getLoginName();
// LocalDateTime now = LocalDateTime.now();
// logger.info("by:{},optParam:{},state:{}", loginName, optParam, state);
//
// int beforeState = state == 4 ? 0 : (state == 5 ? 1 : -1);
// ArrayList<String> updateCodeList = CollectionUtil.arrayListString();
// optParam.getCodes().forEach(r -> {
// String key = AdamRedisConst.INFO_MEMBER_CODE.concat(r);
// AdamMemberCodeVo vo = (AdamMemberCodeVo) redisUtil.get(key);
// if (null != vo && vo.getState() == beforeState) {
// redisUtil.del(key);
//
// updateCodeList.add(vo.getCode());
// }
// });
//
// if (!CollectionUtils.isEmpty(updateCodeList)) {
// LambdaUpdateWrapper<AdamMemberCode> memberCodeUpdateWrapper = Wrappers.lambdaUpdate(AdamMemberCode.class);
// memberCodeUpdateWrapper.eq(AdamMemberCode::getMemberId, optParam.getMemberId());
// memberCodeUpdateWrapper.eq(AdamMemberCode::getState, beforeState);
// memberCodeUpdateWrapper.in(AdamMemberCode::getCode, updateCodeList);
//
// memberCodeUpdateWrapper.set(AdamMemberCode::getState, state);
// memberCodeUpdateWrapper.set(AdamMemberCode::getOperator, loginName);
// memberCodeUpdateWrapper.set(AdamMemberCode::getUpdatedAt, now);
//
// return adamMemberCodeAdminService.update(memberCodeUpdateWrapper);
// }
// return false;
// }
//
// @RequiresPermissions("adam:member:code:recover")
// @Log(title = "会员管理:会员码:退回", businessType = BusinessType.UPDATE)
// @PostMapping("recover")
// @ResponseBody
// public AjaxResult recover(AdamMemberCodeOptParam optParam) {
// return toAjax(this.invalidRecoverCode(optParam, 5));
// }
}
......@@ -31,9 +31,9 @@
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="adam:member:export:code">
<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-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>-->
......@@ -47,24 +47,24 @@
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
var invalidFlag = [[${@permission.hasPermi('adam:member:invalid:code')}]];
var recoverFlag = [[${@permission.hasPermi('adam:member:recover:code')}]];
// 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 prefix = ctx + "adam/member";
var prefix = ctx + "adam/mcode";
$(function() {
var options = {
url: prefix + "/list_code",
exportUrl: prefix + "/export_code",
detailUrl: ctx + "adam/order/orderList/detail/{id}",
url: prefix + "/list",
exportUrl: prefix + "/export",
sortName: "code",
sortOrder: "asc",
modalName: "会员码",
columns: [{
checkbox: true
},
columns: [
{
checkbox: true
},
{
field: 'code',
title: '会员码'
......@@ -98,19 +98,20 @@
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('');
}
}]
// {
// 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('');
// }
// }
]
};
$.table.init(options);
});
......@@ -119,29 +120,29 @@
$.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);
}
}
// 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>
......@@ -5,109 +5,70 @@
<th:block th:include="include :: select2-css" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<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')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="resetPre()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="adam:member:export:code">
<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="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">
<i class="fa fa-plus"></i> 创建
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
var invalidFlag = [[${@permission.hasPermi('adam:member:invalid:code')}]];
var recoverFlag = [[${@permission.hasPermi('adam:member:recover:code')}]];
var datas = [[${@dict.getType('zhengzai_coupon_code_state')}]];// 样例:[{"dictLabel":"未支付","dictValue":"0"},{"dictLabel":"已支付","dictValue":"1"},{"dictLabel":"已关闭","dictValue":"2"}]
var memberId = [[${memberId}]];
var prefix = ctx + "adam/member";
var prefix = ctx + "adam/mcode";
$(function() {
var options = {
url: prefix + "/list_code",
url: prefix + "/mgt/list?memberId=" + memberId,
exportUrl: prefix + "/export_code",
detailUrl: ctx + "adam/order/orderList/detail/{id}",
sortName: "code",
sortOrder: "asc",
modalName: "会员码",
modalName: "会员码创建记录",
columns: [{
checkbox: true
},
{
field: 'code',
title: '会员'
field: 'memberName',
title: '会员名称'
},
{
field: 'expireAt',
title: '到期时间'
field: 'memberCombo',
title: '会员套餐名称'
},
{
field: 'useAt',
title: '使用时间'
field: 'genNum',
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: 'useNum',
title: '使用数量'
},
{
field: 'state',
title: '状态',
align: 'center',
formatter: function(value, row, index) {
return $.table.selectDictLabel(datas, value);
}
field: 'detail',
title: '备注'
},
{
field: 'operator',
title: '创建人'
},
{
field: 'createdAt',
title: '创建时间'
},
{
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>');
}
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> ');
return actions.join('');
}
}]
......@@ -115,32 +76,9 @@
$.table.init(options);
});
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);
}
/* 会员码列表 */
function memberCodeList(batchNo) {
$.modal.openTab("会员码列表", 'adam/mcode/view?batchNo=' + batchNo);
}
</script>
</body>
......
......@@ -201,11 +201,11 @@
<label class="col-sm-2 control-label">是否开售:</label>
<div class="col-sm-10">
<div class="radio-box">
<input type="radio" id="radio1" th:field="*{onsale}" name="onsale" value="2">
<input type="radio" id="radio1" th:checked="*{onsale==2}" name="onsale" value="2">
<label for="radio1"></label>
</div>
<div class="radio-box">
<input type="radio" id="radio2" th:field="*{onsale}" name="onsale" value="1">
<input type="radio" id="radio2" th:checked="*{onsale==1}" name="onsale" value="1">
<label for="radio2"></label>
</div>
</div>
......
......@@ -16,7 +16,7 @@
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('adam:member:view:edit')}]];
var viewMemberCodeFlag = [[${@permission.hasPermi('adam:member:list:code')}]];
var viewMemberCodeMgtFlag = [[${@permission.hasPermi('adam:member:code:mgt:list')}]];
var prefix = ctx + "adam/member";
$(function() {
......@@ -69,7 +69,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 ' + viewMemberCodeFlag + '" href="javascript:void(0)" onclick="memberCodeList(\'' + row.memberId + '\')"><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> ');
return actions.join('');
}
}]
......@@ -77,9 +77,9 @@
$.table.init(options);
});
/* 查看码列表 */
function memberCodeList(memberId) {
$.modal.openTab("会员码列表", 'adam/member/code/' + memberId);
/* 会员码管理 */
function memberCodeMgt(memberId) {
$.modal.openTab("会员码管理", 'adam/mcode/mgt?memberId=' + memberId);
}
function setVipTabs () {
......
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('请上传banner')"/>
<th:block th:include="include :: bootstrap-fileinput-css"/>
</head>
<body class="white-bg">
<th:block th:include="include :: footer"/>
<th:block th:include="include :: bootstrap-fileinput-js"/>
<th:block th:include="include :: bootstrap-fileinput-css" />
<script type="text/javascript">
$(function () {
$("#fileinput-demo-1").fileinput({
'theme': 'explorer-fas',
// 'uploadUrl': "/kylin/banners/upload3",
// 'uploadUrl': "http://127.0.0.1:9003" + "/platform/basicServices/alOss/upload",
'uploadUrl': platformUrl + "/platform/basicServices/alOss/upload",
"uploadExtraData": {
"pathName" : "banner",
"buckType" : 1
},
// overwriteInitial: false,
// initialPreviewAsData: true,
autoReplace: true,
dropZoneTitle: "请上传文件",
maxFileCount: 1
});
})
</script>
</body>
</html>
......@@ -52,9 +52,9 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa
// 需要主动生成会员编号
//initMemberCode.setMemberNo(getNextMemberNo(param.getMemberId()));
initMemberCode.setState(0);// 状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]
initMemberCode.setValidity(param.getValidity());
initMemberCode.setEffectAt(now);
initMemberCode.setExpireAt(now.plusDays(param.getValidity()).withHour(23).withMinute(59).withSecond(59));
// initMemberCode.setValidity(param.getValidity());
// initMemberCode.setEffectAt(now);
// initMemberCode.setExpireAt(now.plusDays(param.getValidity()).withHour(23).withMinute(59).withSecond(59));
initMemberCode.setCreatedAt(now);
memberCodeList.add(initMemberCode);
......
......@@ -16,6 +16,11 @@ public class AdamMemberCode {
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 会员码批次号
*/
private String batchNo;
/**
* 会员码
*/
......@@ -54,7 +59,7 @@ public class AdamMemberCode {
private LocalDateTime expireAt;
/**
* type=2时记录创建
* 操作
*/
private String operator;
......
......@@ -62,7 +62,7 @@ public class AdamMemberCodeBatch implements Serializable {
/**
* 描述
*/
private String describe;
private String detail;
/**
* 有效期(单位天)
......
......@@ -37,7 +37,7 @@ public class PlatformAdamMemberOrderCallbackController {
})
@PostMapping("refund")
public String refund(HttpServletRequest request) {
log.debug("/amorder/callack/refund:[mapParameter:{},token:{}]", JsonUtils.toJson(request.getParameterMap()), request.getHeader("token"));
log.info("/amorder/callack/refund:[mapParameter:{},token:{}]", JsonUtils.toJson(request.getParameterMap()), request.getHeader("token"));
// TODO: 2021/6/13 验签
......
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