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

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

+会员码管理:批次;

parent 05021eb9
package com.liquidnet.client.admin.web.controller.zhengzai.adam; 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.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.client.admin.common.annotation.Log; import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController; 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.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo; import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.enums.BusinessType; 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.IAdamMemberAdminService; import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberAdminService;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberCodeAdminService;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberPriceAdminService; import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberPriceAdminService;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberRightsAdminService; import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberRightsAdminService;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminService; import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminService;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyMgtCouponAdminService; import com.liquidnet.client.admin.zhengzai.candy.service.ICandyMgtCouponAdminService;
import com.liquidnet.common.cache.redis.util.RedisUtil; import com.liquidnet.service.adam.dto.admin.AdamMemberBuildParam;
import com.liquidnet.commons.lang.util.CollectionUtil; import com.liquidnet.service.adam.dto.admin.AdamMemberPriceBuildParam;
import com.liquidnet.service.adam.constant.AdamRedisConst; import com.liquidnet.service.adam.dto.admin.AdamMemberRightsBuildParam;
import com.liquidnet.service.adam.dto.admin.*;
import com.liquidnet.service.adam.dto.vo.AdamMemberCodeVo;
import com.liquidnet.service.adam.entity.AdamMember; import com.liquidnet.service.adam.entity.AdamMember;
import com.liquidnet.service.adam.entity.AdamMemberCode;
import com.liquidnet.service.adam.entity.AdamMemberPrice; import com.liquidnet.service.adam.entity.AdamMemberPrice;
import com.liquidnet.service.adam.entity.AdamMemberRights; import com.liquidnet.service.adam.entity.AdamMemberRights;
import com.liquidnet.service.candy.dto.admin.CandyCouponRuleBuildParam; import com.liquidnet.service.candy.dto.admin.CandyCouponRuleBuildParam;
...@@ -41,8 +32,6 @@ import org.springframework.validation.annotation.Validated; ...@@ -41,8 +32,6 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -60,27 +49,15 @@ public class AdamMemberAdminController extends BaseController { ...@@ -60,27 +49,15 @@ public class AdamMemberAdminController extends BaseController {
@Autowired @Autowired
IAdamMemberRightsAdminService adamMemberRightsAdminService; IAdamMemberRightsAdminService adamMemberRightsAdminService;
@Autowired @Autowired
IAdamMemberCodeAdminService adamMemberCodeAdminService;
@Autowired
ICandyMgtCouponAdminService candyMgtCouponAdminService; ICandyMgtCouponAdminService candyMgtCouponAdminService;
@Autowired @Autowired
ICandyCouponAdminService candyCouponAdminService; ICandyCouponAdminService candyCouponAdminService;
@Autowired
private RedisUtil redisUtil;
@GetMapping() @GetMapping()
public String view() { public String view() {
return prefix + "/member"; return prefix + "/member";
} }
@RequiresPermissions("adam:member:view:code")
@GetMapping("code/{memberId}")
public String viewCode(@PathVariable("memberId") String memberId, ModelMap mmap) {
mmap.put("memberId", memberId);
return prefix + "/code";
}
@RequiresPermissions("adam:member:view:list") @RequiresPermissions("adam:member:view:list")
@Log(title = "会员管理:会员卡:列表", businessType = BusinessType.LIST) @Log(title = "会员管理:会员卡:列表", businessType = BusinessType.LIST)
@PostMapping("list") @PostMapping("list")
...@@ -249,128 +226,4 @@ public class AdamMemberAdminController extends BaseController { ...@@ -249,128 +226,4 @@ public class AdamMemberAdminController extends BaseController {
return this.toAjax(candyMgtCouponAdminService.editMgtCouponForMemberRights(parameter)); return this.toAjax(candyMgtCouponAdminService.editMgtCouponForMemberRights(parameter));
} }
} }
@ApiOperation(value = "会员码:列表")
@RequiresPermissions("adam:member:list:code")
@Log(title = "会员管理:会员码:列表", businessType = BusinessType.LIST)
@PostMapping("list_code")
@ResponseBody
public TableDataInfo listCode(AdamMemberCodeListParam parameter) {
return getDataTable(codeListQuery(parameter));
}
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::getType, 2);
queryWrapper.ne(AdamMemberCode::getState, 2);
if (null != parameter.getState()) {
queryWrapper.eq(AdamMemberCode::getState, parameter.getState());
}
queryWrapper.select(
AdamMemberCode::getCode,
AdamMemberCode::getState,
AdamMemberCode::getOperator,
AdamMemberCode::getCreatedAt,
AdamMemberCode::getValidity,
AdamMemberCode::getEffectAt,
AdamMemberCode::getExpireAt,
AdamMemberCode::getUseOrderNo,
AdamMemberCode::getUseUid,
AdamMemberCode::getUseAt
);
queryWrapper.orderByDesc(AdamMemberCode::getMemberNo);
return adamMemberCodeAdminService.list(queryWrapper);
}
@ApiOperation(value = "会员码:导出")
@RequiresPermissions("adam:member:export:code")
@Log(title = "会员管理:会员码:导出", businessType = BusinessType.EXPORT)
@PostMapping("export_code")
@ResponseBody
public AjaxResult exportCode(AdamMemberCodeListParam parameter) {
List<AdamMemberCode> list = codeListQuery(parameter);
ExcelUtil<AdamMemberCodeExcelDto> excelUtil = new ExcelUtil<>(AdamMemberCodeExcelDto.class);
List<AdamMemberCodeExcelDto> excelList = new ArrayList<>();
list.forEach(r -> {
excelList.add(AdamMemberCodeExcelDto.getNew().copy(r));
});
return excelUtil.exportExcel(excelList, "会员码数据");
}
@ApiOperation(value = "会员码:生成")
@RequiresPermissions("adam:member:gen:code")
@Log(title = "会员管理:会员码:生成", businessType = BusinessType.INSERT)
@PostMapping("gen_code")
@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:invalid:code")
@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:recover:code")
@Log(title = "会员管理:会员码:退回", businessType = BusinessType.UPDATE)
@PostMapping("recover_code")
@ResponseBody
public AjaxResult recover(AdamMemberCodeOptParam optParam) {
return toAjax(this.invalidRecoverCode(optParam, 5));
}
} }
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.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.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 = "会员码管理")
@Controller
@RequestMapping("adam/mcode")
public class AdamMemberCodeAdminController extends BaseController {
private final String prefix = "zhengzai/adam/member/code";
@Autowired
IAdamMemberCodeAdminService adamMemberCodeAdminService;
@Autowired
IAdamMemberPriceAdminService adamMemberPriceAdminService;
@Autowired
RedisUtil redisUtil;
@GetMapping("code/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")
@ResponseBody
public TableDataInfo listCodeMgt(@RequestParam String memberId) {
// TODO: 2021/9/23 码生成记录
return getDataTable(null);
}
@GetMapping("code/view")
public String viewCode(@RequestParam String memberId, @RequestParam String batchNo, ModelMap mmap) {
mmap.put("memberId", memberId);
mmap.put("batchNo", batchNo);
return prefix + "/code";
}
@ApiOperation(value = "会员码:列表")
@RequiresPermissions("adam:member:code:list")
@Log(title = "会员管理:会员码:列表", businessType = BusinessType.LIST)
@PostMapping("code/list")
@ResponseBody
public TableDataInfo listCode(AdamMemberCodeListParam parameter) {
return getDataTable(codeListQuery(parameter));
}
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::getType, 2);
queryWrapper.ne(AdamMemberCode::getState, 2);
if (null != parameter.getState()) {
queryWrapper.eq(AdamMemberCode::getState, parameter.getState());
}
queryWrapper.select(
AdamMemberCode::getCode,
AdamMemberCode::getState,
AdamMemberCode::getOperator,
AdamMemberCode::getCreatedAt,
AdamMemberCode::getValidity,
AdamMemberCode::getEffectAt,
AdamMemberCode::getExpireAt,
AdamMemberCode::getUseOrderNo,
AdamMemberCode::getUseUid,
AdamMemberCode::getUseAt
);
queryWrapper.orderByDesc(AdamMemberCode::getMemberNo);
return adamMemberCodeAdminService.list(queryWrapper);
}
@ApiOperation(value = "会员码:导出")
@RequiresPermissions("adam:member:code:export")
@Log(title = "会员管理:会员码:导出", businessType = BusinessType.EXPORT)
@PostMapping("code/export")
@ResponseBody
public AjaxResult exportCode(AdamMemberCodeListParam parameter) {
List<AdamMemberCode> list = codeListQuery(parameter);
ExcelUtil<AdamMemberCodeExcelDto> excelUtil = new ExcelUtil<>(AdamMemberCodeExcelDto.class);
List<AdamMemberCodeExcelDto> excelList = new ArrayList<>();
list.forEach(r -> {
excelList.add(AdamMemberCodeExcelDto.getNew().copy(r));
});
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));
}
}
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('会员码管理')" />
<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="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</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";
$(function() {
var options = {
url: prefix + "/list_code",
exportUrl: prefix + "/export_code",
detailUrl: ctx + "adam/order/orderList/detail/{id}",
sortName: "code",
sortOrder: "asc",
modalName: "会员码",
columns: [{
checkbox: true
},
{
field: 'code',
title: '会员码'
},
{
field: 'expireAt',
title: '到期时间'
},
{
field: 'useAt',
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: 'state',
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('');
}
}]
};
$.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);
}
}
</script>
</body>
</html>
\ No newline at end of file
...@@ -3,6 +3,7 @@ package com.liquidnet.client.admin.zhengzai.adam.service.impl; ...@@ -3,6 +3,7 @@ package com.liquidnet.client.admin.zhengzai.adam.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberRightsAdminService; import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberRightsAdminService;
import com.liquidnet.common.cache.redis.util.RedisUtil; import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.IDGenerator; import com.liquidnet.commons.lang.util.IDGenerator;
...@@ -16,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -16,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.IntStream; import java.util.stream.IntStream;
...@@ -29,6 +31,8 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh ...@@ -29,6 +31,8 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh
@Override @Override
public boolean edit(AdamMemberRightsBuildParam param) { public boolean edit(AdamMemberRightsBuildParam param) {
String loginName = ShiroUtils.getLoginName();
LocalDateTime now = LocalDateTime.now();
String mrightsId = param.getMrightsId(); String mrightsId = param.getMrightsId();
boolean saveOrUpadateRst, isAddFlag = StringUtils.isEmpty(mrightsId); boolean saveOrUpadateRst, isAddFlag = StringUtils.isEmpty(mrightsId);
...@@ -44,6 +48,8 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh ...@@ -44,6 +48,8 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh
saveOrUpdateInfo.setLabel(param.getLabel()); saveOrUpdateInfo.setLabel(param.getLabel());
saveOrUpdateInfo.setCover(param.getCover()); saveOrUpdateInfo.setCover(param.getCover());
saveOrUpdateInfo.setDetail(param.getDetail()); saveOrUpdateInfo.setDetail(param.getDetail());
saveOrUpdateInfo.setOperator(loginName);
saveOrUpdateInfo.setCreatedAt(now);
saveOrUpadateRst = adamMemberRightsMapper.insert(saveOrUpdateInfo) > 0; saveOrUpadateRst = adamMemberRightsMapper.insert(saveOrUpdateInfo) > 0;
} else { } else {
...@@ -52,12 +58,16 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh ...@@ -52,12 +58,16 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh
.eq(AdamMemberRights::getMrightsId, param.getMrightsId()); .eq(AdamMemberRights::getMrightsId, param.getMrightsId());
saveOrUpdateInfo.setState(param.getState()); saveOrUpdateInfo.setState(param.getState());
saveOrUpdateInfo.setSeqNo(param.getSeqNo()); saveOrUpdateInfo.setOperator(loginName);
saveOrUpdateInfo.setTitle(param.getTitle()); saveOrUpdateInfo.setUpdatedAt(now);
saveOrUpdateInfo.setSubTitle(param.getSubTitle()); if (param.getState() != 2) {
saveOrUpdateInfo.setLabel(param.getLabel()); saveOrUpdateInfo.setSeqNo(param.getSeqNo());
saveOrUpdateInfo.setCover(param.getCover()); saveOrUpdateInfo.setTitle(param.getTitle());
saveOrUpdateInfo.setDetail(param.getDetail()); saveOrUpdateInfo.setSubTitle(param.getSubTitle());
saveOrUpdateInfo.setLabel(param.getLabel());
saveOrUpdateInfo.setCover(param.getCover());
saveOrUpdateInfo.setDetail(param.getDetail());
}
saveOrUpadateRst = adamMemberRightsMapper.update(saveOrUpdateInfo, updateWrapper) > 0; saveOrUpadateRst = adamMemberRightsMapper.update(saveOrUpdateInfo, updateWrapper) > 0;
} }
...@@ -98,7 +108,6 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh ...@@ -98,7 +108,6 @@ public class AdamMemberRightsAdminServiceImpl extends ServiceImpl<AdamMemberRigh
redisUtil.set(AdamRedisConst.INFO_MEMBER_RIGHTS.concat(param.getMemberId()), vos); redisUtil.set(AdamRedisConst.INFO_MEMBER_RIGHTS.concat(param.getMemberId()), vos);
} }
return saveOrUpadateRst; return saveOrUpadateRst;
} }
} }
...@@ -3,6 +3,8 @@ package com.liquidnet.service.adam.entity; ...@@ -3,6 +3,8 @@ package com.liquidnet.service.adam.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
...@@ -65,6 +67,15 @@ public class AdamMemberRights implements Serializable { ...@@ -65,6 +67,15 @@ public class AdamMemberRights implements Serializable {
*/ */
private String detail; private String detail;
/**
* 操作人
*/
private String operator;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private String comment; private String comment;
......
...@@ -133,7 +133,7 @@ create table adam_addresses ...@@ -133,7 +133,7 @@ create table adam_addresses
province varchar(60) not null comment '省份', province varchar(60) not null comment '省份',
city varchar(60) not null comment '城市', city varchar(60) not null comment '城市',
county varchar(60) not null comment '区县', county varchar(60) not null comment '区县',
address text not null comment '详细地址', address text not null comment '详细地址',
is_default boolean not null default false comment '是否为默认:0-否,1-是,第一个默认1', is_default boolean not null default false comment '是否为默认:0-否,1-是,第一个默认1',
state tinyint not null comment '状态:0-INIT,1-NORMAL,2-INVALID', state tinyint not null comment '状态:0-INIT,1-NORMAL,2-INVALID',
created_at datetime(3) not null, created_at datetime(3) not null,
...@@ -356,7 +356,7 @@ alter table adam_member_price add price_special decimal(8, 2) null comment '特 ...@@ -356,7 +356,7 @@ alter table adam_member_price add price_special decimal(8, 2) null comment '特
# 会员码表调整 # 会员码表调整
alter table adam_member_code modify state tinyint null comment '状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]'; alter table adam_member_code modify state tinyint null comment '状态[0-可用|1-已用|2-无效|3-过期|4-失效|5-退回]';
create index idx_amember_code_id on adam_member_code (code); create index idx_amember_code_id on adam_member_code (code);
alter table adam_member_code add validity tinyint null comment '有效期(单位天)' after state; alter table adam_member_code add validity int null comment '有效期(单位天)' after state;
alter table adam_member_code add effect_at datetime(3) null comment '生效时间' after validity; alter table adam_member_code add effect_at datetime(3) null comment '生效时间' after validity;
alter table adam_member_code add expire_at datetime(3) null comment '过期时间' after effect_at; alter table adam_member_code add expire_at datetime(3) null comment '过期时间' after effect_at;
alter table adam_member_code add operator varchar(64) null comment 'type=2时记录创建人' after expire_at; alter table adam_member_code add operator varchar(64) null comment 'type=2时记录创建人' after expire_at;
...@@ -409,6 +409,11 @@ create table adam_member_rights ...@@ -409,6 +409,11 @@ create table adam_member_rights
label varchar(50) comment '标注', label varchar(50) comment '标注',
cover varchar(255) comment '图片标识', cover varchar(255) comment '图片标识',
detail text comment '详情内容', detail text comment '详情内容',
operator varchar(64) comment '操作人',
created_at datetime(3) not null,
updated_at datetime(3),
comment varchar(255) comment varchar(255)
) engine = InnoDB comment '会员权益配置'; ) engine = InnoDB comment '会员权益配置';
create unique index uidx_adam_member_rights_id on adam_member_rights (mrights_id); create unique index uidx_adam_member_rights_id on adam_member_rights (mrights_id);
...@@ -424,11 +429,34 @@ create table adam_user_busi_acct ...@@ -424,11 +429,34 @@ create table adam_user_busi_acct
work varchar(64) comment '业务服务模块', work varchar(64) comment '业务服务模块',
ppwd varchar(64) comment '业务服务密码', ppwd varchar(64) comment '业务服务密码',
state tinyint comment '1-NORMAL,2-INVALID', state tinyint comment '1-NORMAL,2-INVALID',
created_at datetime not null, created_at datetime(3) not null,
updated_at datetime, updated_at datetime(3),
comment text comment text
) engine = InnoDB comment '用户业务服务账号表'; ) engine = InnoDB comment '用户业务服务账号表';
create index idx_adam_user_busi_acct_uid on adam_user_busi_acct (uid); create index idx_adam_user_busi_acct_uid on adam_user_busi_acct (uid);
-- >>------------------------------------------------------------------------------------ -- >>------------------------------------------------------------------------------------|20210924会员码管理
drop table if exists adam_member_code_batch;
create table adam_member_code_batch
(
mid bigint unsigned auto_increment primary key,
batch_no varchar(64) not null comment '会员码批次号',
member_id varchar(64) not null comment '~`adam_member.member_id`',
member_price_id varchar(64) not null comment '~`adam_member_price.member_price_id`',
member_name varchar(80) comment '会员卡名称~`adam_member.name`',
member_combo varchar(80) comment '套餐包名称',
gen_num int comment '生成数量',
use_num int comment '使用数量',
`describe` varchar(64) comment '描述',
validity int comment '有效期(单位天)',
effect_at datetime(3) null comment '生效时间',
expire_at datetime(3) null comment '失效时间',
operator varchar(64) comment '操作人',
created_at datetime(3) not null,
updated_at datetime(3),
comment varchar(255)
) engine = InnoDB comment '会员码批次记录';
-- >>------------------------------------------------------------------------------------ -- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------ -- >>------------------------------------------------------------------------------------
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