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

Commit 89f785ed authored by 胡佳晨's avatar 胡佳晨

Merge remote-tracking branch 'origin/dev_member_voucher_refund_09151' into...

Merge remote-tracking branch 'origin/dev_member_voucher_refund_09151' into dev_member_voucher_refund_09151
parents 0c6395ac fe2be456
...@@ -13,6 +13,7 @@ import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminServic ...@@ -13,6 +13,7 @@ import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminServic
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponRuleAdminService; import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponRuleAdminService;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyMgtCouponAdminService; import com.liquidnet.client.admin.zhengzai.candy.service.ICandyMgtCouponAdminService;
import com.liquidnet.client.admin.zhengzai.kylin.service.impl.KylinPerformancesAdminServiceImpl; import com.liquidnet.client.admin.zhengzai.kylin.service.impl.KylinPerformancesAdminServiceImpl;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.candy.dto.admin.CandyCouponRuleBuildParam; import com.liquidnet.service.candy.dto.admin.CandyCouponRuleBuildParam;
import com.liquidnet.service.candy.dto.admin.CandyMgtCouponBuildParam; import com.liquidnet.service.candy.dto.admin.CandyMgtCouponBuildParam;
import com.liquidnet.service.candy.dto.admin.CandyMgtCouponInfoDto; import com.liquidnet.service.candy.dto.admin.CandyMgtCouponInfoDto;
...@@ -71,23 +72,21 @@ public class CandyMgtCouponAdminController extends BaseController { ...@@ -71,23 +72,21 @@ public class CandyMgtCouponAdminController extends BaseController {
startPage(); startPage();
List<CandyMgtCouponInfoDto> list = candyMgtCouponAdminService.listForMgtCouponInfoDto(listParam); List<CandyMgtCouponInfoDto> list = candyMgtCouponAdminService.listForMgtCouponInfoDto(listParam);
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
switch (listParam.getCouType()) { if (Arrays.asList(3, 101).contains(listParam.getCouType())) {
case 3: String[] couponIdArr = list.stream().map(CandyMgtCouponInfoDto::getCouponId).toArray(String[]::new);
String[] couponIdArr = list.stream().map(CandyMgtCouponInfoDto::getCouponId).toArray(String[]::new);
LambdaQueryWrapper<CandyCouponRule> queryWrapper = Wrappers.lambdaQuery(CandyCouponRule.class); LambdaQueryWrapper<CandyCouponRule> queryWrapper = Wrappers.lambdaQuery(CandyCouponRule.class);
queryWrapper.in(CandyCouponRule::getCouponId, couponIdArr); queryWrapper.in(CandyCouponRule::getCouponId, couponIdArr);
queryWrapper.eq(CandyCouponRule::getState, 1); queryWrapper.eq(CandyCouponRule::getState, 1);
queryWrapper.select(CandyCouponRule::getCruleId, CandyCouponRule::getCouponId, CandyCouponRule::getComment); queryWrapper.select(CandyCouponRule::getCruleId, CandyCouponRule::getCouponId, CandyCouponRule::getBusiName);
List<CandyCouponRule> couponRuleList = candyCouponRuleAdminService.list(queryWrapper); List<CandyCouponRule> couponRuleList = candyCouponRuleAdminService.list(queryWrapper);
list.stream().forEach(r->{ list.stream().forEach(r->{
couponRuleList.forEach(cr -> { couponRuleList.forEach(cr -> {
if (r.getCouponId().equals(cr.getCouponId())) { if (r.getCouponId().equals(cr.getCouponId())) {
r.setCouponRuleScopeName(cr.getBusiName()); r.setCouponRuleScopeName(cr.getBusiName());
} }
});
}); });
break; });
} }
} }
return getDataTable(list); return getDataTable(list);
...@@ -161,7 +160,7 @@ public class CandyMgtCouponAdminController extends BaseController { ...@@ -161,7 +160,7 @@ public class CandyMgtCouponAdminController extends BaseController {
@PostMapping("add") @PostMapping("add")
@ResponseBody @ResponseBody
public AjaxResult addSave(@RequestBody @Validated CandyMgtCouponBuildParam buildParam) { public AjaxResult addSave(@RequestBody @Validated CandyMgtCouponBuildParam buildParam) {
logger.info("operator:{},buildParam:{}", ShiroUtils.getLoginName(), buildParam); logger.info("operator:{},buildParam:{}", ShiroUtils.getLoginName(), JsonUtils.toJson(buildParam));
AjaxResult ajaxResult = this.buildValidProcessing(buildParam); AjaxResult ajaxResult = this.buildValidProcessing(buildParam);
if (((int) ajaxResult.get(AjaxResult.CODE_TAG)) != 0) { if (((int) ajaxResult.get(AjaxResult.CODE_TAG)) != 0) {
return ajaxResult; return ajaxResult;
...@@ -205,17 +204,20 @@ public class CandyMgtCouponAdminController extends BaseController { ...@@ -205,17 +204,20 @@ public class CandyMgtCouponAdminController extends BaseController {
if (null == discount || discount.compareTo(BigDecimal.ZERO) <= 0) { if (null == discount || discount.compareTo(BigDecimal.ZERO) <= 0) {
return AjaxResult.warn("折扣配置无效"); return AjaxResult.warn("折扣配置无效");
} }
if (buildParam.getBusiType() != 3) { if (buildParam.getBusiType() != 2) {
return AjaxResult.warn("当前类别不支持折扣券"); return AjaxResult.warn("当前类别不支持折扣券");
} }
buildParam.setValFace(null); buildParam.setValFace(null);
buildParam.setValOver(null); buildParam.setValOver(null);
buildParam.setValMinus(null); buildParam.setValMinus(null);
break; break;
case 101: case 101:// 优先券
if (null == buildParam.getOverlay()) { if (null == buildParam.getOverlay()) {
return AjaxResult.warn("叠加限制配置无效"); return AjaxResult.warn("叠加限制配置无效");
} }
if (buildParam.getBusiType() != 3) {
return AjaxResult.warn("当前类别不支持优先券");
}
buildParam.setDiscount(null); buildParam.setDiscount(null);
buildParam.setValFace(null); buildParam.setValFace(null);
buildParam.setValOver(null); buildParam.setValOver(null);
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<ul> <ul>
<input type="text" name="couponId" hidden="hidden" th:value="${couponId}" readonly/> <input type="text" name="couponId" hidden="hidden" th:value="${couponId}" readonly/>
<li> <li>
状态:<select name="state" th:with="type=${@dict.getType('zhengzai_coupon_code_state')}"> 状态:<select name="state" th:with="type=${@dict.getType('zhengzai_coupon_code_state')}" onchange="selectChange()" class="selectChange">
<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>
...@@ -31,10 +31,10 @@ ...@@ -31,10 +31,10 @@
<a class="btn btn-warning multiple disabled" onclick="$.table.exportExcel()" shiro:hasPermission="candy:coupon:code:export"> <a class="btn btn-warning multiple disabled" onclick="$.table.exportExcel()" shiro:hasPermission="candy:coupon:code:export">
<i class="fa fa-download"></i> 导出 <i class="fa fa-download"></i> 导出
</a> </a>
<a class="btn btn-primary multiple disabled" onclick="invalidHandler()" shiro:hasPermission="candy:coupon:code:invalid"> <a class="btn btn-primary multiple disabled selectChangeShow" style="display: none" onclick="invalidHandler()" shiro:hasPermission="candy:coupon:code:invalid">
<i class="fa fa-edit"></i> 批量失效 <i class="fa fa-edit"></i> 批量失效
</a> </a>
<a class="btn btn-danger multiple disabled" onclick="recoverHandler()" shiro:hasPermission="candy:coupon:code:recover"> <a class="btn btn-danger multiple disabled selectChangeShow" style="display: none" onclick="recoverHandler()" shiro:hasPermission="candy:coupon:code:recover">
<i class="fa fa-remove"></i> 批量退回 <i class="fa fa-remove"></i> 批量退回
</a> </a>
</div> </div>
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
}, },
{ {
field: 'ccode', field: 'ccode',
title: '代金码' title: '码'
}, },
{ {
field: 'redeemMobile', field: 'redeemMobile',
...@@ -89,8 +89,10 @@ ...@@ -89,8 +89,10 @@
align: 'center', align: 'center',
formatter: function(value, row, index) { formatter: function(value, row, index) {
var actions = []; var actions = [];
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> '); if (row.state === 0) {
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>'); 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 ' + recoverFlag + '" href="javascript:void(0)" onclick="recoverHandler(\'' + row.ccode + '\')"><i class="fa fa-remove"></i>退回</a>');
}
return actions.join(''); return actions.join('');
} }
}] }]
...@@ -125,6 +127,16 @@ ...@@ -125,6 +127,16 @@
$.operate.batchProcessingForCouponCode(couponId, 2); $.operate.batchProcessingForCouponCode(couponId, 2);
} }
} }
function selectChange() {
let val = $(".selectChange").val();
console.log(typeof val);
if (val === '0') {
$(".selectChangeShow").show();
} else {
$(".selectChangeShow").hide();
}
}
</script> </script>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -150,7 +150,7 @@ ...@@ -150,7 +150,7 @@
<input type="radio" value="0" class="typeOne" name="typeOne" checked><span>全场</span> <input type="radio" value="0" class="typeOne" name="typeOne" checked><span>全场</span>
<input type="radio" value="1" class="typeOne" name="typeOne"><span>演出</span> <input type="radio" value="1" class="typeOne" name="typeOne"><span>演出</span>
<input type="radio" value="2" class="typeOne" name="typeOne"><span>商品</span> <input type="radio" value="2" class="typeOne" name="typeOne"><span>商品</span>
<input type="radio" value="3" class="typeOne" name="typeOne"><span>优先购</span> <!-- <input type="radio" value="3" class="typeOne" name="typeOne"><span>优先购</span>-->
</div> </div>
</div> </div>
......
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('新增优先券')" />
<th:block th:include="include :: select2-css" />
<link rel="stylesheet" href="">
<style>
.layui-form {
padding: 20px;
}
.main_title, .main_type, .scope_application, .sendType,.phoneNumber {
margin-bottom: 20px;
}
.sendType,.phoneNumber,#test1 {
display: none;
}
#test1 {
display: none;
}
.labelName {
display: inline-block;
width: 100px;
text-align: right;
}
input {
border: 1px solid #ddd;
border-radius: 4px;
background: transparent;
outline: none;
padding-left: 5px;
height: 30px;
}
.main_title input {
width: 200px;
}
.prompt {
margin-left: 100px !important;
}
.main_type input, .sendType input,.playMethod input {
margin-top: -2px;
margin-right: 5px;
}
.main_type span, .sendType span, .playMethod span {
margin-right: 12px;
line-height: 28px;
}
.layui-form .money input {
width: 60px;
}
.changeData .dataOne {
margin-bottom: 20px;
}
.changeData .dataOne p {
margin: 12px 0 0 20px;
color: #ccc;
}
.changeData .dataOne input {
width: 60px;
}
.main_bottom .describe, .main_bottom .sendTime {
margin-bottom: 20px;
}
.describe,.main_type {
display: flex;
}
.describe textarea,.phoneNumber textarea {
width: 400px;
}
.sendTime {
display: flex;
}
.sendTime input {
margin-top: -6px;
margin-right: 5px;
}
.bottom_btn {
width: 25%;
text-align: center;
}
select {
border: 1px solid #ddd;
border-radius: 4px;
background: transparent;
outline: none;
height: 30px;
width: 200px;
}
.search_ipt ul,.search_ipt li{
padding: 0;
margin: 0;
font-style: normal;
list-style: none;
}
.search_ipt ul {
display: none;
position: absolute;
left: 0;
top: 26px;
padding: 5px 0;
z-index: 899;
min-width: 200px;
border: 1px solid #eee;
max-height: 300px;
overflow-y: auto;
background-color: #fff;
border-radius: 2px;
box-sizing: border-box;
box-shadow: 1px 1px 4px rgb(0 0 0 / 8%);
}
.search_ipt li {
background-color: #fff;
cursor: pointer;
padding-left: 10px!important;
color: #999;
padding: 0 10px;
line-height: 36px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.search_ipt li:hover {
background: #F6F6F6;
}
.search_ipt .layui-input {
width: 200px;
}
#test1 {
display: none;
}
.required {
font-style: normal;
color: red;
}
#iptModal {
display: none;
}
#valOver, #valMinus {
margin: 0 12px;
}
</style>
</head>
<body>
<form id="form-user-add" class="layui-form">
<div class="main_title">
<span class="labelName"><i class="required">*</i>名称:</span><input type="text" id="title" name="keyword" placeholder="券名称" />
</div>
<div class="main_type">
<span class="labelName">类别:</span>
<div class="layui-input-block" style="display: flex">
<input type="radio" value="3" class="typeOne" name="typeOne" checked><span>优先购</span>
</div>
</div>
<div class="main_type">
<span class="labelName">类型:</span>
<div class="layui-input-block" style="display: flex">
<input type="radio" value="0" class="typeTwo" name="typeTwo" checked><span>用户输入兑换</span>
<input type="radio" value="1" class="typeTwo" name="typeTwo"><span>发送至“我的券”</span>
</div>
</div>
<div class="scope_application" id="scope_application">
<span class="labelName">适用范围:</span>
<div class="search_ipt" style="position: relative;display: inline;">
<input type="text" id="searchIpt" autocomplete="off" class="layui-input" placeholder="全部">
<ul id="dataList" style="position: absolute;"></ul>
</div>
<select name="bindType" id="selectTwo" hidden>
<option value="">所有</option>
</select>
<select name="bindType" id="selectThree" hidden>
<option value="">所有</option>
</select>
</div>
<div class="changeData">
<div id="modalOne">
<div class="dataOne">
<span class="labelName"><i class="required">*</i>数量:</span>
<input type="text" id="num" required />
</div>
<div class="dataOne">
<span class="labelName"><i class="required">*</i>券的有效期:</span>
<input type="text" id="ticketTime" required />
<p class="prompt">*可兑换的时间</p>
</div>
<div class="dataOne" id="exchange">
<span class="labelName"><i class="required">*</i>兑换有效期:</span>
<input type="text" id="exchangeTime" required />
<p class="prompt">*兑换后的有效时间</p>
</div>
</div>
</div>
<div class="sendType">
<div style="display: flex;align-items: center;">
<span class="labelName">发送类型:</span>
<div class="layui-input-block" style="display: flex">
<input type="radio" value="10" class="sendType" name="sendType" checked><span>全体用户</span>
<input type="radio" value="1" class="sendType" name="sendType"><span>会员</span>
<input type="radio" value="2" class="sendType" name="sendType"><span>手机号</span>
</div>
</div>
</div>
<div class="phoneNumber">
<span style="display:inline-block;margin-bottom: 12px;"><i class="required">*</i>请输入手机号<span style="color: #ccc">(手机号可填多个,使用","隔开)</span></span>
<textarea id="phoneNum" class="form-control" rows="4" style="margin-left: 100px"></textarea>
</div>
<div class="main_bottom">
<div class="describe">
<span class="labelName">
描述说明:
</span>
<textarea id="describeTxt" class="form-control" rows="4"></textarea>
</div>
</div>
<div class="main_type">
<span class="labelName">使用限制:</span>
<div class="layui-input-block" style="display: flex">
<input type="radio" value="0" class="typeOverlay" name="typeOverlay"><span>叠加</span>
<input type="radio" value="1" class="typeOverlay" name="typeOverlay" checked><span>限制</span>
</div>
</div>
<div class="sendTime">
<span class="labelName">发送时间:</span>
<div class="layui-input-block" style="display: flex">
<input type="radio" name="sex" value="1" title="立即" checked><span>立即</span>
<span style="margin-right:12px;" id="iptModal"><p style="display:flex"><input type="radio" name="sex" value="2" title="预约" style="margin-left: 12px;">预约</p></span>
</div>
<input type="text" class="layui-input" id="test1" placeholder="请选择时间">
</div>
<div class="bottom_btn">
<!-- <button type="button" class="layui-btn btn btn-primary" lay-filter="formDemo" onclick="create()">创建代金券</button> -->
<button type="button" class="btn btn-primary" onclick="create()">创建优先券</button>
</div>
</form>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<th:block th:include="include :: bootstrap-suggest-js"/>
</body>
<script th:inline="javascript">
var phpMallUrl = [[${phpMallUrl}]];
var roadShowId = '[[${roadShowId}]]'.replaceAll("\"", "");
let prefix = ctx;
let typeOne = '3'; // 类别
let typeTwo = '0'; // 类型
let sendType = '10'; // 发送类型
let searchVal = ''; // 输入框内数据
let searchData = []; // 搜索总数据
let showId = ''; // 选中演出id
let selectTwoId = ''; // 选中演出下级的ID
let selectTwoName = ''; // 选中演出下级的名称
let selectThreeId = ''; // 选中演出三级的ID
let selectThreeName = ''; // 选中演出三级的名称
let sendTimeType = '';
let playMethod = '1'; // 叠加/限制
function search() {
let data = {
status: '(3,6)',
title: searchVal
}
let str = '';
promiseMethods(ctx+'kylin/base/performance/status','get',data,'application/x-www-form-urlencoded').then(res=>{
if (res.value.length>0) {
searchData = res.value;
searchData.forEach((item,index)=>{
str+= `<li class="selectData" onclick="selectOne('${item.performancesId}','${item.title}')">${item.title}</li>`
})
$('#dataList').html(str);
} else {
$('#dataList').html('<li style="width:100%;text-align:center;color:#ccc;">--- 暂无数据 ---</li>');
}
})
};
function getMallList() {
let data = {
title: ''
}
let str = '';
promiseMethods(phpMallUrl + '/admin/goodListForQuick','get',data,'application/x-www-form-urlencoded').then(res=>{
if (res.data.length>0) {
searchData = res.data;
searchData.forEach((item,index)=>{
str+= `<li class="selectData" onclick="selectOne('${item.id}','${item.title}')">${item.title}</li>`
})
$('#dataList').html(str);
} else {
$('#dataList').html('<li style="width:100%;text-align:center;color:#ccc;">--- 暂无数据 ---</li>');
}
})
};
function selectOne(id,name) {
$("#searchIpt").val(name);
showId = id;
if (typeOne == 2) {
return
}
let str = `<option value="0" label="">所有</option>`;
searchData.forEach(item=>{
if (item.performancesId == id) {
str+= `<option value='${item.timeId}' label=${item.timeTitle}>${item.timeTitle}</option>`
}
})
selectTwoId = ''; // 选中演出下级的ID
selectThreeId = ''; // 选中演出三级的ID
$('#selectTwo').empty().append(str);
$('#selectThree').empty();
};
$("#searchIpt").focus(function(){
if (typeOne == 2) {
getMallList()
} else {
console.log('search')
search()
}
$('#dataList').show()
});
$("#searchIpt").blur(function(){
setTimeout(() => {
$('#dataList').hide()
}, 500);
});
$("#searchIpt").keyup(function(){
searchVal = $("#searchIpt").val()
search()
});
$('#selectTwo').change(function(e){
selectTwoId = $(this).val();
console.log(selectTwoId,'kankna')
selectTwoName = $('#selectTwo').find('option:selected').attr('label');
let str = `<option value="0" label="" >所有</option>`;
searchData.forEach(item=>{
if (item.timeId == selectTwoId) {
str+= `<option value='${item.ticketId}' label=${item.ticketTitle}>${item.ticketTitle}</option>`
}
})
selectThreeId = ''; // 选中演出三级的ID
$('#selectThree').empty().append(str);
});
$('#selectThree').change(function(e){
selectThreeId = $(this).val();
selectThreeName = $('#selectThree').find('option:selected').attr('label');
});
$("input[name=typeTwo]").change(function(e){
typeTwo = e.target.value;
if (typeTwo == 1) {
$('#iptModal').show();
$('.sendType').show();
$('#exchangeTime').val('')
$('#exchange').hide();
if (sendType == 2) {
$('.phoneNumber').show();
}
} else {
$('#iptModal').hide();
$('#exchange').show();
$('.sendType').hide();
$('.phoneNumber').hide();
$('.test1').val('');
$('.phoneNum').val('');
$('.test1').hide();
}
});
$("input[name=sendType]").change(function(e){
sendType = e.target.value;
if (e.target.value == 2) {
$('.phoneNumber').show();
$('.test1').show();
} else {
$('.phoneNumber').hide();
$('.test1').val('');
$('.test1').hide();
}
});
$("input[name=sex]").change(function(e){
sendTimeType = e.target.value;
if (sendTimeType == 2) {
$('#test1').show();
} else {
$('#test1').val('')
$('#test1').hide();
}
});
$("input[name=typeOverlay]").change(function(e){
playMethod = e.target.value;
});
layui.use('laydate', function(){
var laydate = layui.laydate;
//执行一个laydate实例
laydate.render({
elem: '#test1', //指定元素
type: 'datetime'
});
});
function create() {
if (!$('#title').val() || !$('#num').val() || !$('#ticketTime').val()) {
return layer.msg('请将必填项输入完整~!');
if (typeTwo != 1) {
if (!$('#exchangeTime').val()) {
return layer.msg('请将必填项输入完整~!');
}
}
}
let useScope = 100;
let busiName = $('#searchIpt').val();
let busiId = '';
if (!$('#searchIpt').val()) {
showId = '';
}
if (showId) {
useScope = 90;
busiId = showId;
}
if (selectTwoId) {
useScope = 91;
busiId = selectTwoId;
// busiName = selectTwoName;
}
if (selectThreeId) {
useScope = 92;
busiId = selectThreeId;
// busiName = selectThreeName;
}
let data = {
"bindType": Number(typeTwo), // 兑换券/发放
"busiType": Number(typeOne), // 业务类别
"couType": 101, // 券类型
"couponRuleList": [ // 适用范围[100-全场|90-演出|91-场次|92-票|80-商品|81-款式]
{
"useScope": 90,
"busiName": busiName || '全部演出',
"busiId": busiId
}
],
"discount": '', // 折扣券需传
"eventAmt": Number($('#num').val()), // 数量
"eventAt": $('#test1').val() || $.common.dateFormat(new Date(), 'yyyy-MM-dd HH:mm:ss'),
"eventLimit": $('#phoneNum').val(), // 手机号
"eventType": Number(sendType),
"label": "标注", // 不需管
"notice": $('#describeTxt').val(),
"overlay": playMethod, // 优先购ticketTime
"redeemValidity": Number($('#exchangeTime').val()), // 兑换有效期
"title": $('#title').val(),
"valOver": $('#valOver').val(),
"valMinus": $('#valMinus').val(),
// "valFace": $('#valFace').val(), // 金额
"validity": Number($('#ticketTime').val()),
}
if (typeTwo == 1) {// 发放
delete data.redeemValidity
} else {
delete data.eventType
}
if (sendType != 2) {
delete data.eventLimit;
}
console.log(data,'data')
promiseMethods('/candy/coupon/mgt/add','post',JSON.stringify(data),'application/json').then(res=>{
console.log(res)
})
}
function promiseMethods(url,type,data,contentType) {
return new Promise((resolve,reject)=>{
$.ajax({
url,
type,
data,
contentType,
success:function(res) {
resolve(res)
}
})
})
}
</script>
</html>
...@@ -153,7 +153,7 @@ ...@@ -153,7 +153,7 @@
<input type="radio" value="0" class="typeOne" name="typeOne" checked><span>全场</span> <input type="radio" value="0" class="typeOne" name="typeOne" checked><span>全场</span>
<input type="radio" value="1" class="typeOne" name="typeOne"><span>演出</span> <input type="radio" value="1" class="typeOne" name="typeOne"><span>演出</span>
<input type="radio" value="2" class="typeOne" name="typeOne"><span>商品</span> <input type="radio" value="2" class="typeOne" name="typeOne"><span>商品</span>
<input type="radio" value="3" class="typeOne" name="typeOne"><span>优先购</span> <!-- <input type="radio" value="3" class="typeOne" name="typeOne"><span>优先购</span>-->
</div> </div>
</div> </div>
......
...@@ -132,7 +132,7 @@ ...@@ -132,7 +132,7 @@
// if (row.state === 0) { // if (row.state === 0) {
// actions.push('<a class="btn btn-danger btn-xs ' + cancelMgtCouponFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.mcouponId + '\')"><i class="fa fa-remove"></i>取消</a>'); // actions.push('<a class="btn btn-danger btn-xs ' + cancelMgtCouponFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.mcouponId + '\')"><i class="fa fa-remove"></i>取消</a>');
// } // }
if (row.bindType === 0) { if (row.bindType === 0 && row.state === 1) {
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> '); 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('');
......
<!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('兑换券')" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="coupon-form">
<div class="select-list">
<ul>
<input type="hidden" name="couType" th:value="${couType}" />
<li>
<input type="text" name="keyword" placeholder="搜索"/>
</li>
<li>
类型:<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>
适用范围:<select name="busiType" th:with="type=${@dict.getType('zhengzai_coupon_busi_type')}">
<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="$.form.reset()"><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-success" th:onclick="$.operate.addTab([[${couType}]])" shiro:hasPermission="candy:coupon:mgt:add">
<i class="fa fa-plus"></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" />
<script th:inline="javascript">
var prefix = ctx + "candy/coupon/mgt";
var viewMgtCouponFlag = [[${@permission.hasPermi('candy:coupon:mgt:detail')}]];
var cancelMgtCouponFlag = [[${@permission.hasPermi('candy:coupon:mgt:cancel')}]];
var couType = [[${couType}]];
$(function() {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add/{id}",
detailUrl: prefix + "/detail/" + couType + "/{id}",
removeUrl: prefix + "/cancel/{id}",
// updateUrl: prefix + "/edit/{id}",
// exportUrl: prefix + "/export",
sortName: "createdAt",
modalName: "优先券",
columns: [
{
checkbox: true
},
{
field: 'couponRuleScopeName',
title: '适用演出'
},
{
field: 'eventAmt',
title: '数量'
},
{
field: 'title',
title: '标题'
},
{
field: 'notice',
title: '描述'
},
{
field: 'operator',
title: '创建人'
},
{
field: 'createdAt',
title: '生成时间',
sortable: true,
formatter: function (value, row, index) {
return $.common.sprintf("<span>%s</span>", null != value ? value.substring(0, 19) : value);
}
},
{
field: 'expireAt',
title: '失效时间',
formatter: function (value, row, index) {
return $.common.sprintf("<span>%s</span>", value);
}
},
{
title: '操作',
// align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-warning btn-xs ' + viewMgtCouponFlag + '" href="javascript:void(0)" onclick="$.operate.detail(\'' + row.mcouponId + '\')"><i class="fa fa-search"></i>详情</a>');
// if (row.state === 0) {
// actions.push('<a class="btn btn-danger btn-xs ' + cancelMgtCouponFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.mcouponId + '\')"><i class="fa fa-remove"></i>取消</a>');
// }
if (row.bindType === 0 && row.state === 1) {
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('');
}
}]
};
$.table.init(options);
});
/* 查看码列表 */
function couponCodeList(couponId) {
var url = 'candy/coupon/code?couponId=' + couponId;
$.modal.openTab("查看码列表", url);
}
</script>
</body>
</html>
\ No newline at end of file
...@@ -132,7 +132,7 @@ ...@@ -132,7 +132,7 @@
// if (row.state === 0) { // if (row.state === 0) {
// actions.push('<a class="btn btn-danger btn-xs ' + cancelMgtCouponFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.mcouponId + '\')"><i class="fa fa-remove"></i>取消</a>'); // actions.push('<a class="btn btn-danger btn-xs ' + cancelMgtCouponFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.mcouponId + '\')"><i class="fa fa-remove"></i>取消</a>');
// } // }
if (row.bindType === 0) { if (row.bindType === 0 && row.state === 1) {
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> '); 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('');
......
...@@ -113,7 +113,7 @@ ...@@ -113,7 +113,7 @@
// if (row.state === 0) { // if (row.state === 0) {
// actions.push('<a class="btn btn-danger btn-xs ' + cancelMgtCouponFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.mcouponId + '\')"><i class="fa fa-remove"></i>取消</a>'); // actions.push('<a class="btn btn-danger btn-xs ' + cancelMgtCouponFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.mcouponId + '\')"><i class="fa fa-remove"></i>取消</a>');
// } // }
if (row.bindType === 0) { if (row.bindType === 0 && row.state === 1) {
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> '); 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('');
......
...@@ -132,7 +132,7 @@ ...@@ -132,7 +132,7 @@
// if (row.state === 0) { // if (row.state === 0) {
// actions.push('<a class="btn btn-danger btn-xs ' + cancelMgtCouponFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.mcouponId + '\')"><i class="fa fa-remove"></i>取消</a>'); // actions.push('<a class="btn btn-danger btn-xs ' + cancelMgtCouponFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.mcouponId + '\')"><i class="fa fa-remove"></i>取消</a>');
// } // }
if (row.bindType === 0) { if (row.bindType === 0 && row.state === 1) {
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> '); 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('');
......
...@@ -57,10 +57,12 @@ public class AdamMemberServiceAdminImpl extends ServiceImpl<AdamMemberMapper, Ad ...@@ -57,10 +57,12 @@ public class AdamMemberServiceAdminImpl extends ServiceImpl<AdamMemberMapper, Ad
// adamMember.setLimitbAt(LocalDateTime.parse(parameter.getLimitbAt(), dateTimeFormatter)); // adamMember.setLimitbAt(LocalDateTime.parse(parameter.getLimitbAt(), dateTimeFormatter));
// adamMember.setLimiteAt(LocalDateTime.parse(parameter.getLimitbAt(), dateTimeFormatter)); // adamMember.setLimiteAt(LocalDateTime.parse(parameter.getLimitbAt(), dateTimeFormatter));
adamMember.setUpdatedAt(LocalDateTime.now()); adamMember.setUpdatedAt(LocalDateTime.now());
AdamMemberVo vo = AdamMemberVo.getNew().copy(adamMember);
LambdaQueryWrapper<AdamMember> updateMemberWrapper = Wrappers.lambdaQuery(AdamMember.class).eq(AdamMember::getMemberId, parameter.getMemberId()); LambdaQueryWrapper<AdamMember> updateMemberWrapper = Wrappers.lambdaQuery(AdamMember.class).eq(AdamMember::getMemberId, parameter.getMemberId());
if (adamMemberMapper.update(adamMember, updateMemberWrapper) > 0) { if (adamMemberMapper.update(adamMember, updateMemberWrapper) > 0) {
adamMember = adamMemberMapper.selectOne(updateMemberWrapper);
AdamMemberVo vo = AdamMemberVo.getNew().copy(adamMember);
redisUtil.set(AdamRedisConst.INFO_MEMBER_CATEGORY.concat(vo.getMemberId()), vo); redisUtil.set(AdamRedisConst.INFO_MEMBER_CATEGORY.concat(vo.getMemberId()), vo);
redisUtil.del(AdamRedisConst.INFO_MEMBER_SIMPLE); redisUtil.del(AdamRedisConst.INFO_MEMBER_SIMPLE);
return true; return true;
......
package com.liquidnet.service.feign.kylin.api;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.feign.kylin.config.SecuringRequestInterceptor;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import feign.hystrix.FallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.HashMap;
import java.util.List;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: FeignKylinForChimeClient
* @Package com.liquidnet.service.feign.kylin.api
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/9/11 18:20
*/
@Component
@FeignClient(name = "liquidnet-service-kylin",
contextId = "FeignKylinForChimeClient", path = "",
url = "${liquidnet.service.kylin.url}",
fallback = FallbackFactory.Default.class,
configuration = SecuringRequestInterceptor.class)
public interface FeignKylinForChimeClient {
@GetMapping("myPerformance/performancesList")
ResponseDto<List<KylinPerformanceVo>> myPerformancesList();
@GetMapping("performance/localList")
ResponseDto<HashMap<String, Object>> localList(
@RequestParam(value = "cityName",defaultValue = "") String cityName,
@RequestParam(value = "days",defaultValue = "0") int days,
@RequestParam(value = "type",defaultValue = "0") int type,
@RequestParam(value = "isDiscount",defaultValue = "") Integer isDiscount,
@RequestParam(value = "isAdvance",defaultValue = "") Integer isAdvance,
@RequestParam(value = "isExclusive",defaultValue = "") Integer isExclusive,
// 排序
@RequestParam(value = "orderBy",defaultValue = "") String orderBy,
@RequestParam(value = "sort",defaultValue = "") String sort
);
// @GetMapping(value = "/performance/list")
// ResponseDto<List<KylinPerformanceVo>> performanceList(@RequestParam("performancesIds") String... performancesIds);
@GetMapping("myPerformance/getDetail")
ResponseDto<KylinPerformanceVo> getDetail(
@RequestParam("performancesId") String performancesId
);
}
package com.liquidnet.service.feign.kylin.config;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: 解决feign调用传递header问题
* @class: SecuringRequestInterceptor
* @Package com.liquidnet.service.chime.config
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/9/11 19:22
*/
@Component
public class SecuringRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
requestTemplate.header(name, values);
}
}
}
}
\ No newline at end of file
package com.liquidnet.service.kylin.controller; package com.liquidnet.service.kylin.controller;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo; import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.service.impl.KylinPerformancesServiceImpl; import com.liquidnet.service.kylin.service.impl.KylinPerformancesServiceImpl;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
...@@ -36,4 +37,26 @@ public class KylinMyPerformancesController { ...@@ -36,4 +37,26 @@ public class KylinMyPerformancesController {
List<KylinPerformanceVo> result = kylinPerformancesService.myPerformancesList(); List<KylinPerformanceVo> result = kylinPerformancesService.myPerformancesList();
return ResponseDto.success(result); return ResponseDto.success(result);
} }
@GetMapping("getDetail")
@ApiOperation("演出详情")
@ApiImplicitParams({
@ApiImplicitParam(type = "path", dataType = "String", name = "performancesId", value = "演出id", required = true)
})
public ResponseDto<KylinPerformanceVo> getDetail(
@RequestParam("performancesId") String performancesId
) {
try {
KylinPerformanceVo result = kylinPerformancesService.detail(performancesId, 0, 0, "0");
if (result != null) {
return ResponseDto.success(result);
} else {
return ResponseDto.failure(ErrorMapping.get("20700"));
}
} catch (Exception e) {
log.error("演出详情Error", e);
return ResponseDto.failure(ErrorMapping.get("20700"));
}
}
} }
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