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

Commit 22605f86 authored by 张国柄's avatar 张国柄

+我的券后台功能;

parent 61410dee
...@@ -60,7 +60,7 @@ public class CandyMgtCouponBuildParam { ...@@ -60,7 +60,7 @@ public class CandyMgtCouponBuildParam {
//private String comment; //private String comment;
@ApiModelProperty(required = true, value = "适用规则列表", dataType = "List") @ApiModelProperty(required = true, value = "适用规则列表", dataType = "List", example = "[{\"useScope\": 100,\"busiName\": \"适用名称1\",\"busiId\": \"IDIDIDIDIDIDID1\"},{\"useScope\": 100,\"busiName\": \"适用名称2\",\"busiId\": \"IDIDIDIDIDIDID2\"}]")
private List<CandyCouponRuleBuildParam> couponRuleList; private List<CandyCouponRuleBuildParam> couponRuleList;
......
package com.liquidnet.client.admin.web.controller.zhengzai.candy; package com.liquidnet.client.admin.web.controller.zhengzai.candy;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.core.controller.BaseController; import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.entity.SysRole; 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.utils.poi.ExcelUtil;
import com.liquidnet.client.admin.zhengzai.candy.dto.CandyCouponCodeExcelDto;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponCodeAdminService; import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponCodeAdminService;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.candy.constant.CandyRedisConst;
import com.liquidnet.service.candy.dto.CandyCouponCodeDto;
import com.liquidnet.service.candy.dto.admin.CandyCouponCodeListParam; import com.liquidnet.service.candy.dto.admin.CandyCouponCodeListParam;
import com.liquidnet.service.candy.dto.admin.CandyCouponCodeOptParam;
import com.liquidnet.service.candy.entity.CandyCouponCode; import com.liquidnet.service.candy.entity.CandyCouponCode;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Api(tags = "券码管理") @Api(tags = "券码管理")
@Slf4j
@Controller @Controller
@RequestMapping("candy/coupon/code") @RequestMapping("candy/coupon/code")
public class CandyCouponCodeAdminController extends BaseController { public class CandyCouponCodeAdminController extends BaseController {
private String prefix = "zhengzai/candy/coupon/code"; private String prefix = "zhengzai/candy/coupon/code";
@Autowired
private RedisUtil redisUtil;
@Autowired @Autowired
private ICandyCouponCodeAdminService candyCouponCodeAdminService; private ICandyCouponCodeAdminService candyCouponCodeAdminService;
@RequiresPermissions("candy:coupon:code:view") @RequiresPermissions("candy:coupon:code:view")
@GetMapping() @GetMapping()
public String role() public String role(@RequestParam String couponId, ModelMap mmap)
{ {
mmap.put("couponId", couponId);
return prefix + "/code"; return prefix + "/code";
} }
...@@ -42,10 +52,95 @@ public class CandyCouponCodeAdminController extends BaseController { ...@@ -42,10 +52,95 @@ public class CandyCouponCodeAdminController extends BaseController {
@ResponseBody @ResponseBody
public TableDataInfo list(CandyCouponCodeListParam listParam) public TableDataInfo list(CandyCouponCodeListParam listParam)
{ {
LambdaQueryWrapper<CandyCouponCode> lambdaQuery = Wrappers.lambdaQuery(CandyCouponCode.class).orderByAsc(CandyCouponCode::getCcode);
lambdaQuery.eq(CandyCouponCode::getCouponId, listParam.getCouponId())
.select(
CandyCouponCode::getCcode,
CandyCouponCode::getCouponId,
CandyCouponCode::getRedeemMobile,
CandyCouponCode::getState
);
if (null != listParam.getState()) {
lambdaQuery.eq(CandyCouponCode::getState, listParam.getState());
}
startPage(); startPage();
LambdaQueryWrapper<CandyCouponCode> lambdaQuery = Wrappers.lambdaQuery(CandyCouponCode.class);
lambdaQuery.eq(CandyCouponCode::getCouponId, listParam.getCouponId()).eq(CandyCouponCode::getState, listParam.getState());
List<CandyCouponCode> list = candyCouponCodeAdminService.list(lambdaQuery); List<CandyCouponCode> list = candyCouponCodeAdminService.list(lambdaQuery);
return getDataTable(list); return getDataTable(list);
} }
@RequiresPermissions("candy:coupon:code:export")
@PostMapping("export")
@ResponseBody
public AjaxResult export(CandyCouponCodeListParam listParam)
{
LambdaQueryWrapper<CandyCouponCode> lambdaQuery = Wrappers.lambdaQuery(CandyCouponCode.class);
lambdaQuery.eq(CandyCouponCode::getCouponId, listParam.getCouponId())
.select(
CandyCouponCode::getCcode,
CandyCouponCode::getCouponId,
CandyCouponCode::getRedeemMobile,
CandyCouponCode::getState
);
if (null != listParam.getState()) {
lambdaQuery.eq(CandyCouponCode::getState, listParam.getState());
}
List<CandyCouponCode> list = candyCouponCodeAdminService.list(lambdaQuery);
ExcelUtil<CandyCouponCodeExcelDto> excelUtil = new ExcelUtil<>(CandyCouponCodeExcelDto.class);
List<CandyCouponCodeExcelDto> excelList = new ArrayList<>();
list.forEach(r -> {
excelList.add(CandyCouponCodeExcelDto.getNew().copy(r));
});
return excelUtil.exportExcel(excelList, "券码数据");
}
@RequiresPermissions("candy:coupon:code:invalid")
@PostMapping("invalid")
@ResponseBody
public AjaxResult invalid(CandyCouponCodeOptParam optParam)
{
logger.debug("optParam:{}", JsonUtils.toJson(optParam));
optParam.getCcodes().forEach(r -> {
String key = CandyRedisConst.BASIC_COUPON_CODE.concat(r);
CandyCouponCodeDto dto = (CandyCouponCodeDto) redisUtil.get(key);
if (null != dto) {
dto.setState(2);
redisUtil.set(key, dto);
}
});
LambdaUpdateWrapper<CandyCouponCode> couponCodeUpdateWrapper = Wrappers.lambdaUpdate(CandyCouponCode.class);
couponCodeUpdateWrapper.in(CandyCouponCode::getCcode, optParam.getCcodes()).eq(CandyCouponCode::getCouponId, optParam.getCouponId());
CandyCouponCode updateCouponCode = new CandyCouponCode();
updateCouponCode.setState(2);
updateCouponCode.setUpdatedAt(LocalDateTime.now());
return toAjax(candyCouponCodeAdminService.update(updateCouponCode, couponCodeUpdateWrapper));
}
@RequiresPermissions("candy:coupon:code:recover")
@PostMapping("recover")
@ResponseBody
public AjaxResult recover(CandyCouponCodeOptParam optParam)
{
logger.debug("optParam:{}", JsonUtils.toJson(optParam));
optParam.getCcodes().forEach(r -> {
String key = CandyRedisConst.BASIC_COUPON_CODE.concat(r);
CandyCouponCodeDto dto = (CandyCouponCodeDto) redisUtil.get(key);
if (null != dto) {
dto.setState(3);
redisUtil.set(key, dto);
}
});
LambdaUpdateWrapper<CandyCouponCode> couponCodeUpdateWrapper = Wrappers.lambdaUpdate(CandyCouponCode.class);
couponCodeUpdateWrapper.in(CandyCouponCode::getCcode, optParam.getCcodes()).eq(CandyCouponCode::getCouponId, optParam.getCouponId());
CandyCouponCode updateCouponCode = new CandyCouponCode();
updateCouponCode.setState(3);
updateCouponCode.setUpdatedAt(LocalDateTime.now());
return toAjax(candyCouponCodeAdminService.update(updateCouponCode, couponCodeUpdateWrapper));
}
} }
package com.liquidnet.client.admin.web.controller.zhengzai.candy;
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.DateUtils;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminService;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyMgtCouponAdminService;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.candy.dto.admin.CandyMgtCouponBuildParam;
import com.liquidnet.service.candy.dto.admin.CandyMgtCouponInfoDto;
import com.liquidnet.service.candy.dto.admin.CandyMgtCouponListParam;
import com.liquidnet.service.candy.entity.CandyCoupon;
import com.liquidnet.service.candy.entity.CandyMgtCoupon;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
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;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@Api(tags = "券发放管理")
@Controller
@RequestMapping("candy/coupon1/mgt")
public class CandyMgtCoupon1AdminController extends BaseController {
private final String prefix = "zhengzai/candy/coupon/mgt";
@Autowired
private ICandyMgtCouponAdminService candyMgtCouponAdminService;
@Autowired
private ICandyCouponAdminService candyCouponAdminService;
@RequiresPermissions("candy:coupon1:mgt:view")
@GetMapping()
public String coupon() {
return prefix + "/coupon1";
}
@RequiresPermissions("candy:coupon1:mgt:list")
@PostMapping("list")
@ResponseBody
public TableDataInfo list(CandyMgtCouponListParam listParam) {
listParam.setCouType(1);
startPage();
List<CandyMgtCouponInfoDto> list = candyMgtCouponAdminService.listForMgtCouponInfoDto(listParam);
return getDataTable(list);
}
@GetMapping("add")
public String add() {
return prefix + "/add1";
}
@ApiOperation(value = "新建券")
@RequiresPermissions("candy:coupon1:mgt:add")
@Log(title = "券发放管理", businessType = BusinessType.INSERT)
@PostMapping("add")
@ResponseBody
public AjaxResult addSave(@Validated CandyMgtCouponBuildParam buildParam) {
BigDecimal discount = null, valFace = null, valOver = null, valMinus = null;
Integer couType = buildParam.getCouType(),
validity = buildParam.getValidity(),
redeemValidity = buildParam.getRedeemValidity();
LocalDateTime nowTime = LocalDateTime.now(),
redeemStart = null, redeemStop = null, effectAt, expireAt,
eventAt = LocalDateTime.parse(buildParam.getEventAt(), DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD_HH_MM_SS));
switch (couType) {// TODO: 2021/8/20 校验
case 1:// 代金券
valFace = buildParam.getValFace();
break;
case 2:// 满减券
valOver = buildParam.getValOver();
valMinus = buildParam.getValMinus();
break;
case 3:// 兑换券
redeemStart = eventAt.with(LocalTime.MIN);
redeemStop = eventAt.plusDays(redeemValidity).withHour(23).withMinute(59).withSecond(59);
break;
case 4:// 折扣券
discount = buildParam.getDiscount();
break;
default:
logger.warn("Invalid operation[buildParam.couType={}]", couType);
return this.error(AjaxResult.Type.WARN, "券类型无效");
}
effectAt = eventAt.with(LocalTime.MIN);
expireAt = eventAt.plusDays(validity).withHour(23).withMinute(59).withSecond(59);
String eventLimit = null, operator = ShiroUtils.getLoginName();
if (buildParam.getEventType() == 2) {// 指定用户手机号
eventLimit = buildParam.getEventLimit().trim();
// TODO: 2021/8/20 正则校验手机号字符串
if (StringUtils.isEmpty(eventLimit)) {
return this.error(AjaxResult.Type.WARN, "请指定手机号");
}
}
CandyCoupon initCoupon = new CandyCoupon();
initCoupon.setCouponId(IDGenerator.nextMilliId());
initCoupon.setState(1);
initCoupon.setTitle(buildParam.getTitle());
initCoupon.setLabel(buildParam.getLabel());
initCoupon.setNotice(buildParam.getNotice());
initCoupon.setExclusive(0);
initCoupon.setBusiType(buildParam.getBusiType());
initCoupon.setCouType(couType);
initCoupon.setBindType(buildParam.getBindType());
initCoupon.setDiscount(discount);
initCoupon.setValFace(valFace);
initCoupon.setValOver(valOver);
initCoupon.setValMinus(valMinus);
initCoupon.setOverlay(buildParam.getOverlay());
initCoupon.setValidity(validity);
initCoupon.setRedeemValidity(redeemValidity);
initCoupon.setRedeemStart(redeemStart);
initCoupon.setRedeemStop(redeemStop);
initCoupon.setEffectAt(effectAt);
initCoupon.setExpireAt(expireAt);
initCoupon.setOperator(operator);
initCoupon.setCreatedAt(nowTime);
CandyMgtCoupon initMgtCoupon = new CandyMgtCoupon();
initMgtCoupon.setMcouponId(IDGenerator.nextMilliId());
initMgtCoupon.setCouponId(initCoupon.getCouponId());
initMgtCoupon.setState(0);
initMgtCoupon.setEventAmt(buildParam.getEventAmt());
initMgtCoupon.setEventType(buildParam.getEventType());
initMgtCoupon.setEventLimit(eventLimit);
initMgtCoupon.setEventAt(eventAt);
initMgtCoupon.setOperator(operator);
initMgtCoupon.setCreatedAt(nowTime);
candyMgtCouponAdminService.saveMgtCouponInfo(initCoupon, initMgtCoupon);
return toAjax(true);
}
}
...@@ -1057,6 +1057,35 @@ var table = { ...@@ -1057,6 +1057,35 @@ var table = {
$.operate.submit(url, "post", "json", data); $.operate.submit(url, "post", "json", data);
}); });
}, },
// 批量失效
batchProcessingForCouponCode: function(couponId, opt) {
table.set();
var url, message, uniqueId, optName;
if (uniqueId) {
var rows = $.table.selectColumns(uniqueId);
} else {
var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
}
if (opt === 1) {
url = 'code/invalid';
optName = '失效';
} else if (opt === 2) {
url = 'code/recover';
optName = '退回';
} else {
$.modal.alertWarning("选择有误");
return;
}
message = message ?? "确认要" + optName + "选中的" + rows.length + "条数据吗?";
if (rows.length == 0) {
$.modal.alertWarning("请至少选择一条记录");
return;
}
$.modal.confirm(message, function() {
var data = { "couponId": couponId,"ccodes": rows.join() };
$.operate.submit(url, "post", "json", data);
});
},
// 清空信息 // 清空信息
clean: function() { clean: function() {
table.set(); table.set();
......
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> <html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head> <head>
<th:block th:include="include :: header('角色列表')" /> <th:block th:include="include :: header('代金码列表')" />
<th:block th:include="include :: select2-css" />
</head> </head>
<body class="gray-bg"> <body class="gray-bg">
<div class="container-div"> <div class="container-div">
<div class="row"> <div class="row">
<div class="col-sm-12 search-collapse"> <div class="col-sm-12 search-collapse">
<form id="role-form"> <form id="data-form">
<div class="select-list"> <div class="select-list">
<ul> <ul>
<input type="text" name="couponId" hidden="hidden" th:value="${couponId}" readonly/>
<li> <li>
角色名称:<input type="text" name="roleName"/> 状态:<select name="state" th:with="type=${@dict.getType('zhengzai_coupon_code_state')}">
</li>
<li>
权限字符:<input type="text" name="roleKey"/>
</li>
<li>
角色状态:<select name="status" th:with="type=${@dict.getType('sys_normal_disable')}">
<option value="">所有</option> <option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option> <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select> </select>
</li> </li>
<li class="select-time">
<label>创建时间: </label>
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/>
<span>-</span>
<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/>
</li>
<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-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="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a> <a class="btn btn-warning btn-rounded btn-sm" onclick="resetPre()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li> </li>
</ul> </ul>
</div> </div>
...@@ -38,17 +28,14 @@ ...@@ -38,17 +28,14 @@
</div> </div>
<div class="btn-group-sm" id="toolbar" role="group"> <div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:role:add"> <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="candy:coupon:code:export">
<i class="fa fa-plus"></i> 新增 <i class="fa fa-download"></i> 导出
</a>
<a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="system:role:edit">
<i class="fa fa-edit"></i> 修改
</a> </a>
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="system:role:remove"> <a class="btn btn-primary multiple disabled" onclick="invalidHandler()" shiro:hasPermission="candy:coupon:code:invalid">
<i class="fa fa-remove"></i> 删除 <i class="fa fa-edit"></i> 批量失效
</a> </a>
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:role:export"> <a class="btn btn-danger multiple disabled" onclick="recoverHandler()" shiro:hasPermission="candy:coupon:code:recover">
<i class="fa fa-download"></i> 导出 <i class="fa fa-remove"></i> 批量退回
</a> </a>
</div> </div>
...@@ -56,69 +43,54 @@ ...@@ -56,69 +43,54 @@
<table id="bootstrap-table"></table> <table id="bootstrap-table"></table>
</div> </div>
</div> </div>
</div> </div>
<th:block th:include="include :: footer" /> <th:block th:include="include :: footer" />
<script th:inline="javascript"> <th:block th:include="include :: select2-js" />
var editFlag = [[${@permission.hasPermi('system:role:edit')}]]; <script th:inline="javascript">
var removeFlag = [[${@permission.hasPermi('system:role:remove')}]]; var invalidFlag = [[${@permission.hasPermi('candy:coupon:code:invalid')}]];
var prefix = ctx + "system/role"; var recoverFlag = [[${@permission.hasPermi('candy:coupon:code:recover')}]];
var datas = [[${@dict.getType('zhengzai_coupon_code_state')}]];
var couponId = [[${couponId}]];
var prefix = ctx + "candy/coupon/code";
$(function() { $(function() {
var options = { var options = {
url: prefix + "/list", url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export", exportUrl: prefix + "/export",
sortName: "roleSort", queryParams: queryParams,
modalName: "角色", sortName: "ccode",
sortOrder: "asc",
modalName: "数据",
columns: [{ columns: [{
checkbox: true checkbox: true
}, },
{ {
field: 'roleId', field: 'ccode',
title: '角色编号' title: '代金码'
}, },
{ {
field: 'roleName', field: 'redeemMobile',
title: '角色名称', title: '用户手机号',
sortable: true formatter: function(value, row, index) {
}, var listClass = $.common.equals("default", row.listClass) || $.common.isEmpty(row.listClass) ? "" : "badge badge-" + row.listClass;
{ return $.common.sprintf("<span class='%s'>%s</span>", listClass, value);
field: 'roleKey', }
title: '权限字符',
sortable: true
},
{
field: 'roleSort',
title: '显示顺序',
sortable: true
}, },
{ {
visible: editFlag == 'hidden' ? false : true, field: 'state',
title: '角色状态', title: '状态',
align: 'center', align: 'center',
formatter: function (value, row, index) { formatter: function(value, row, index) {
return statusTools(row); return $.table.selectDictLabel(datas, value);
} }
}, },
{
field: 'createTime',
title: '创建时间',
sortable: true
},
{ {
title: '操作', title: '操作',
align: 'center', align: 'center',
formatter: function(value, row, index) { formatter: function(value, row, index) {
var actions = []; var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.roleId + '\')"><i class="fa fa-edit"></i>编辑</a> '); actions.push('<a class="btn btn-primary btn-xs ' + invalidFlag + '" href="javascript:void(0)" onclick="invalidHandler(\'' + row.ccode + '\')"><i class="fa fa-edit"></i>失效</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.roleId + '\')"><i class="fa fa-remove"></i>删除</a> '); actions.push('<a class="btn btn-danger btn-xs ' + recoverFlag + '" href="javascript:void(0)" onclick="recoverHandler(\'' + row.ccode + '\')"><i class="fa fa-remove"></i>退回</a>');
var more = [];
more.push("<a class='btn btn-default btn-xs " + editFlag + "' href='javascript:void(0)' onclick='authDataScope(" + row.roleId + ")'><i class='fa fa-check-square-o'></i>数据权限</a> ");
more.push("<a class='btn btn-default btn-xs " + editFlag + "' href='javascript:void(0)' onclick='authUser(" + row.roleId + ")'><i class='fa fa-user'></i>分配用户</a>");
actions.push('<a tabindex="0" class="btn btn-info btn-xs" role="button" data-container="body" data-placement="left" data-toggle="popover" data-html="true" data-trigger="hover" data-content="' + more.join('') + '"><i class="fa fa-chevron-circle-right"></i>更多操作</a>');
return actions.join(''); return actions.join('');
} }
}] }]
...@@ -126,40 +98,33 @@ ...@@ -126,40 +98,33 @@
$.table.init(options); $.table.init(options);
}); });
/* 角色管理-分配数据权限 */ function resetPre() {
function authDataScope(roleId) { $.form.reset();
var url = prefix + '/authDataScope/' + roleId;
$.modal.open("分配数据权限", url);
} }
/* 角色管理-分配用户 */ function queryParams(params) {
function authUser(roleId) { var search = $.table.queryParams(params);
var url = prefix + '/authUser/' + roleId; search.dictType = $("#dictType").val();
$.modal.openTab("分配用户", url); return search;
} }
/* 角色状态显示 */ function invalidHandler(ccode) {
function statusTools(row) { if (ccode !== null && ccode !== undefined) {
if (row.status == 1) { var data = {"couponId":couponId,"ccodes": ccode};
return '<i class=\"fa fa-toggle-off text-info fa-2x\" onclick="enable(\'' + row.roleId + '\')"></i> '; $.operate.submit('code/invalid', "post", "json", data);
} else { } else {
return '<i class=\"fa fa-toggle-on text-info fa-2x\" onclick="disable(\'' + row.roleId + '\')"></i> '; $.operate.batchProcessingForCouponCode(couponId, 1);
} }
} }
/* 角色管理-停用 */ function recoverHandler(ccode) {
function disable(roleId) { if (ccode !== null && ccode !== undefined) {
$.modal.confirm("确认要停用角色吗?", function() { var data = {"couponId":couponId,"ccodes": ccode};
$.operate.post(prefix + "/changeStatus", { "roleId": roleId, "status": 1 }); $.operate.submit('code/recover', "post", "json", data);
}) } else {
$.operate.batchProcessingForCouponCode(couponId, 2);
} }
/* 角色管理启用 */
function enable(roleId) {
$.modal.confirm("确认要启用角色吗?", function() {
$.operate.post(prefix + "/changeStatus", { "roleId": roleId, "status": 0 });
})
} }
</script> </script>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -7,27 +7,24 @@ ...@@ -7,27 +7,24 @@
<div class="container-div"> <div class="container-div">
<div class="row"> <div class="row">
<div class="col-sm-12 search-collapse"> <div class="col-sm-12 search-collapse">
<form id="role-form"> <form id="coupon-form">
<div class="select-list"> <div class="select-list">
<ul> <ul>
<li> <li>
角色名称:<input type="text" name="roleName"/> <input type="text" name="keyword" placeholder="搜索"/>
</li> </li>
<li> <li>
权限字符:<input type="text" name="roleKey"/> 类型:<select name="bindType" th:with="type=${@dict.getType('zhengzai_coupon_bind_type')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</li> </li>
<li> <li>
角色状态:<select name="status" th:with="type=${@dict.getType('sys_normal_disable')}"> 适用范围:<select name="busiType" th:with="type=${@dict.getType('zhengzai_coupon_busi_type')}">
<option value="">所有</option> <option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option> <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select> </select>
</li> </li>
<li class="select-time">
<label>创建时间: </label>
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[beginTime]"/>
<span>-</span>
<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[endTime]"/>
</li>
<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-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="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a> <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
...@@ -38,7 +35,7 @@ ...@@ -38,7 +35,7 @@
</div> </div>
<div class="btn-group-sm" id="toolbar" role="group"> <div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="candy:coupon:mgt:add"> <a class="btn btn-success" onclick="$.operate.addTab('')" shiro:hasPermission="candy:coupon:mgt:add">
<i class="fa fa-plus"></i> 新增 <i class="fa fa-plus"></i> 新增
</a> </a>
</div> </div>
...@@ -51,7 +48,7 @@ ...@@ -51,7 +48,7 @@
<th:block th:include="include :: footer" /> <th:block th:include="include :: footer" />
<script th:inline="javascript"> <script th:inline="javascript">
var couponCodeListFlag = [[${@permission.hasPermi('system:role:edit')}]]; var couponCodeListFlag = [[${@permission.hasPermi('system:role:edit')}]];
var prefix = ctx + "candy/coupon/mgt"; var prefix = ctx + "candy/coupon1/mgt";
$(function() { $(function() {
var options = { var options = {
...@@ -110,7 +107,7 @@ ...@@ -110,7 +107,7 @@
align: 'center', align: 'center',
formatter: function(value, row, index) { formatter: function(value, row, index) {
var actions = []; var actions = [];
actions.push("<a class='btn btn-default btn-xs " + couponCodeListFlag + "' href='javascript:void(0)' onclick='authUser(" + row.roleId + ")'><i class='fa fa-user'></i></a>"); actions.push('<a class="btn btn-info btn-xs" href="javascript:void(0)" onclick="couponCodeList(\'' + row.couponId + '\')"><i class="fa fa-list-ul"></i>查看码列表</a> ');
return actions.join(''); return actions.join('');
} }
}] }]
...@@ -118,9 +115,9 @@ ...@@ -118,9 +115,9 @@
$.table.init(options); $.table.init(options);
}); });
/* 码列表 */ /* 查看码列表 */
function couponCodeList(couponId) { function couponCodeList(couponId) {
var url = prefix + '/code/' + couponId; var url = 'candy/coupon/code?couponId=' + couponId;
$.modal.openTab("查看码列表", url); $.modal.openTab("查看码列表", url);
} }
</script> </script>
......
package com.liquidnet.client.admin.zhengzai.candy.dto;
import com.liquidnet.client.admin.common.annotation.Excel;
import com.liquidnet.service.candy.entity.CandyCouponCode;
import lombok.Data;
import java.io.Serializable;
@Data
public class CandyCouponCodeExcelDto implements Serializable, Cloneable {
private static final long serialVersionUID = 2420844668059161869L;
@Excel(name = "券码")
private String ccode;
@Excel(name = "券码")
private String redeemMobile;
@Excel(name = "状态")
private String state;
@Excel(name = "批次号")
private String couponId;
private static final CandyCouponCodeExcelDto obj = new CandyCouponCodeExcelDto();
public static CandyCouponCodeExcelDto getNew() {
try {
return (CandyCouponCodeExcelDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new CandyCouponCodeExcelDto();
}
}
public CandyCouponCodeExcelDto copy(CandyCouponCode source) {
if (null == source) return this;
this.setCcode(source.getCcode());
this.setRedeemMobile(source.getRedeemMobile());
switch (source.getState()) {
case 0:
this.setState("未使用");
break;
case 1:
this.setState("已使用");
break;
case 2:
this.setState("失效");
break;
case 3:
this.setState("退回");
break;
default:
this.setState(String.valueOf(source.getState()));
break;
}
this.setCouponId(source.getCouponId());
return this;
}
}
package com.liquidnet.service.candy.dto.admin;
import lombok.Data;
import java.util.List;
@Data
public class CandyCouponCodeOptParam {
/**
* ~candy_coupon.coupon_id
*/
private String couponId;
/**
* 多个以,分隔
*/
private List<String> ccodes;
}
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<result column="mcoupon_id" jdbcType="VARCHAR" property="mcouponId"/> <result column="mcoupon_id" jdbcType="VARCHAR" property="mcouponId"/>
<!-- <result column="coupon_id" jdbcType="VARCHAR" property="couponId" />--> <!-- <result column="coupon_id" jdbcType="VARCHAR" property="couponId" />-->
<result column="state" jdbcType="TINYINT" property="state"/> <result column="state" jdbcType="TINYINT" property="state"/>
<result column="bind_type" jdbcType="SMALLINT" property="bindType"/> <!-- <result column="bind_type" jdbcType="SMALLINT" property="bindType"/>-->
<result column="event_amt" jdbcType="INTEGER" property="eventAmt"/> <result column="event_amt" jdbcType="INTEGER" property="eventAmt"/>
<result column="event_type" jdbcType="TINYINT" property="eventType"/> <result column="event_type" jdbcType="TINYINT" property="eventType"/>
<result column="event_limit" jdbcType="VARCHAR" property="eventLimit"/> <result column="event_limit" jdbcType="VARCHAR" property="eventLimit"/>
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
<!-- <result column="comment" jdbcType="VARCHAR" property="comment" />--> <!-- <result column="comment" jdbcType="VARCHAR" property="comment" />-->
</resultMap> </resultMap>
<select id="selectMultiForMgtCouponInfoDto" resultMap="Rst_MgtCouponInfoDto"> <select id="selectMultiForMgtCouponInfoDto" parameterType="com.liquidnet.service.candy.dto.admin.CandyMgtCouponListParam" resultMap="Rst_MgtCouponInfoDto">
SELECT cc.coupon_id, SELECT cc.coupon_id,
cc.title, cc.title,
cc.`label`, cc.`label`,
...@@ -68,7 +68,6 @@ ...@@ -68,7 +68,6 @@
cmc.mcoupon_id, cmc.mcoupon_id,
cmc.coupon_id, cmc.coupon_id,
cmc.`state`, cmc.`state`,
cmc.bind_type,
cmc.event_amt, cmc.event_amt,
cmc.event_type, cmc.event_type,
cmc.event_limit, cmc.event_limit,
...@@ -79,6 +78,20 @@ ...@@ -79,6 +78,20 @@
FROM candy_mgt_coupon cmc FROM candy_mgt_coupon cmc
LEFT JOIN candy_coupon cc ON cmc.coupon_id = cc.coupon_id LEFT JOIN candy_coupon cc ON cmc.coupon_id = cc.coupon_id
WHERE cmc.state <![CDATA[<>]]> 2 WHERE cmc.state <![CDATA[<>]]> 2
<if test="couType != null">
AND cc.cou_type = #{couType,jdbcType=SMALLINT}
</if>
<if test="keyword != null and keyword != ''">
AND INSTR(CONCAT(cc.title, cc.notice), #{keyword,jdbcType=VARCHAR})
</if>
<if test="bindType != null">
AND cc.bind_type = #{bindType,jdbcType=SMALLINT}
</if>
<if test="busiType != null">
AND cc.busi_type = #{busiType,jdbcType=SMALLINT}
</if>
ORDER BY cmc.created_at DESC ORDER BY cmc.created_at DESC
</select> </select>
</mapper> </mapper>
\ No newline at end of file
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