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

Commit 6017d1aa authored by wangyifan's avatar wangyifan

草莓护照-补签审核;权限控制;解绑护照删除 发放护照类型徽章

parent 69a54a39
package com.liquidnet.service.adam.dto.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("草莓护照-补签审核搜索参数")
public class AdamCaomeiBadgeApplyAuditSearchParam {
@ApiModelProperty(value = "用户名/姓名")
private String userName;
@ApiModelProperty(value = "审核状态:0-待审核 1-已通过 2-已驳回")
private Integer auditStatus;
}
package com.liquidnet.service.adam.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel("草莓护照-补签审核详情")
public class AdamCaomeiBadgeApplyAuditDetailVo {
@ApiModelProperty(value = "申请ID")
private String applyRecordId;
@ApiModelProperty(value = "申请账号")
private String userId;
@ApiModelProperty(value = "用户名")
private String nickname;
@ApiModelProperty(value = "姓名")
private String realName;
@ApiModelProperty(value = "证件号(脱敏)")
private String idCard;
@ApiModelProperty(value = "申请徽章ID")
private String badgeId;
@ApiModelProperty(value = "申请徽章")
private String badgeName;
@ApiModelProperty(value = "关联演出ID")
private String performanceId;
@ApiModelProperty(value = "关联演出")
private String performanceName;
@ApiModelProperty(value = "申请附件")
private String proofImageUrl;
@ApiModelProperty(value = "审核状态:0-待审核 1-已通过 2-已驳回")
private Integer auditStatus;
@ApiModelProperty(value = "驳回理由")
private String rejectReason;
@ApiModelProperty(value = "申请时间")
private Date createdAt;
@ApiModelProperty(value = "审核时间")
private Date updatedAt;
}
package com.liquidnet.service.adam.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel("草莓护照-补签审核列表")
public class AdamCaomeiBadgeApplyAuditVo {
@ApiModelProperty(value = "申请ID")
private String applyRecordId;
@ApiModelProperty(value = "申请账号")
private String userId;
@ApiModelProperty(value = "用户名")
private String nickname;
@ApiModelProperty(value = "姓名")
private String realName;
@ApiModelProperty(value = "证件号(脱敏)")
private String idCard;
@ApiModelProperty(value = "申请徽章")
private String badgeName;
@ApiModelProperty(value = "关联演出")
private String performanceName;
@ApiModelProperty(value = "申请附件")
private String proofImageUrl;
@ApiModelProperty(value = "审核状态:0-待审核 1-已通过 2-已驳回")
private Integer auditStatus;
@ApiModelProperty(value = "申请时间")
private Date createdAt;
}
package com.liquidnet.client.admin.web.controller.zhengzai.adam;
import com.github.pagehelper.PageInfo;
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.zhengzai.adam.service.IAdamCaomeiBadgeApplyAuditAdminService;
import com.liquidnet.service.adam.dto.param.AdamCaomeiBadgeApplyAuditSearchParam;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiBadgeApplyAuditDetailVo;
import io.swagger.annotations.Api;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Api(tags = "草莓护照-补签审核")
@Controller
@RequestMapping("adam/caomei/badgeApplyAudit")
public class AdamCaomeiBadgeApplyAuditController extends BaseController {
private final String prefix = "zhengzai/adam/caomei/badgeApplyAudit";
@Autowired
private IAdamCaomeiBadgeApplyAuditAdminService badgeApplyAuditAdminService;
@RequiresPermissions("adam:caomei:badgeApplyAudit:list")
@GetMapping()
public String view() {
return prefix + "/list";
}
@RequiresPermissions("adam:caomei:badgeApplyAudit:list")
@PostMapping("list")
@ResponseBody
public TableDataInfo list(AdamCaomeiBadgeApplyAuditSearchParam param) {
startPage();
PageInfo<?> pageInfo = badgeApplyAuditAdminService.listApplyAudits(param);
return getDataTable(pageInfo);
}
@RequiresPermissions("adam:caomei:badgeApplyAudit:list")
@GetMapping("detail/{applyRecordId}")
public String detail(@PathVariable("applyRecordId") String applyRecordId, ModelMap mmap) {
AdamCaomeiBadgeApplyAuditDetailVo detail = badgeApplyAuditAdminService.getApplyAuditDetail(applyRecordId);
mmap.put("detail", detail);
return prefix + "/detail";
}
@RequiresPermissions("adam:caomei:badgeApplyAudit:edit")
@Log(title = "草莓护照-补签审核:通过", businessType = BusinessType.UPDATE)
@PostMapping("pass")
@ResponseBody
public AjaxResult pass(@RequestParam("applyRecordId") String applyRecordId) {
boolean ok = badgeApplyAuditAdminService.passApplyAudit(applyRecordId);
if (!ok) {
return error("审核通过失败:申请不存在或当前状态不可操作");
}
return success();
}
@RequiresPermissions("adam:caomei:badgeApplyAudit:edit")
@Log(title = "草莓护照-补签审核:驳回", businessType = BusinessType.UPDATE)
@PostMapping("reject")
@ResponseBody
public AjaxResult reject(@RequestParam("applyRecordId") String applyRecordId,
@RequestParam("rejectReason") String rejectReason) {
if (StringUtils.isBlank(rejectReason)) {
return error("驳回理由不能为空");
}
boolean ok = badgeApplyAuditAdminService.rejectApplyAudit(applyRecordId, rejectReason);
if (!ok) {
return error("驳回失败:申请不存在或当前状态不可操作");
}
return success();
}
}
package com.liquidnet.client.admin.web.controller.zhengzai.adam;
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;
......@@ -32,7 +33,7 @@ public class AdamCaomeiBadgeController extends BaseController {
@Autowired
private IAdamCaomeiBadgeAdminService adamCaomeiBadgeAdminService;
@RequiresPermissions("adam:caomei:badge:view")
@RequiresPermissions("adam:caomei:badge:list")
@GetMapping()
public String view() {
return prefix + "/badge_list";
......@@ -47,6 +48,7 @@ public class AdamCaomeiBadgeController extends BaseController {
return getDataTable(pageInfo);
}
@RequiresPermissions("adam:caomei:badge:add")
@GetMapping("add")
public String add() {
return prefix + "/badge_add";
......@@ -79,15 +81,17 @@ public class AdamCaomeiBadgeController extends BaseController {
return toAjax(adamCaomeiBadgeAdminService.save(badge));
}
@RequiresPermissions("adam:caomei:badge:view")
@GetMapping("detail/{mid}")
public String detail(@PathVariable("mid") Long mid, ModelMap mmap) {
AdamCaomeiBadge badge = adamCaomeiBadgeAdminService.getById(mid);
@RequiresPermissions("adam:caomei:badge:list")
@GetMapping("detail/{badgeId}")
public String detail(@PathVariable("badgeId") String badgeId, ModelMap mmap) {
AdamCaomeiBadge badge = adamCaomeiBadgeAdminService.getOne(
Wrappers.lambdaQuery(AdamCaomeiBadge.class).eq(AdamCaomeiBadge::getBadgeId, badgeId), false
);
mmap.put("badge", badge);
return prefix + "/badge_detail";
}
@RequiresPermissions("adam:caomei:badge:view")
@RequiresPermissions("adam:caomei:badge:list")
@GetMapping("claimUsers/{badgeId}")
public String claimUsers(@PathVariable("badgeId") String badgeId, ModelMap mmap) {
mmap.put("badgeId", badgeId);
......@@ -103,9 +107,12 @@ public class AdamCaomeiBadgeController extends BaseController {
return getDataTable(pageInfo);
}
@GetMapping("edit/{mid}")
public String edit(@PathVariable("mid") Long mid, ModelMap mmap) {
AdamCaomeiBadge badge = adamCaomeiBadgeAdminService.getById(mid);
@RequiresPermissions("adam:caomei:badge:edit")
@GetMapping("edit/{badgeId}")
public String edit(@PathVariable("badgeId") String badgeId, ModelMap mmap) {
AdamCaomeiBadge badge = adamCaomeiBadgeAdminService.getOne(
Wrappers.lambdaQuery(AdamCaomeiBadge.class).eq(AdamCaomeiBadge::getBadgeId, badgeId), false
);
mmap.put("badge", badge);
return prefix + "/badge_edit";
}
......@@ -115,12 +122,15 @@ public class AdamCaomeiBadgeController extends BaseController {
@PostMapping("edit")
@ResponseBody
public AjaxResult editSave(AdamCaomeiBadgeParam param) {
AdamCaomeiBadge oldBadge = adamCaomeiBadgeAdminService.getById(param.getMid());
AdamCaomeiBadge oldBadge = adamCaomeiBadgeAdminService.getOne(
Wrappers.lambdaQuery(AdamCaomeiBadge.class).eq(AdamCaomeiBadge::getBadgeId, param.getBadgeId()), false
);
if (oldBadge == null || oldBadge.getDisplayStatus() == 1) {
return error("已发布的徽章不允许修改");
}
AdamCaomeiBadge badge = new AdamCaomeiBadge();
BeanUtils.copyProperties(param, badge);
badge.setMid(oldBadge.getMid());
badge.setUpdatedAt(new java.util.Date());
if (badge.getType() != null && badge.getType() != 2) {
badge.setPerformanceId("");
......@@ -133,8 +143,14 @@ public class AdamCaomeiBadgeController extends BaseController {
@PostMapping("changeStatus")
@ResponseBody
public AjaxResult changeStatus(AdamCaomeiBadgeParam param) {
AdamCaomeiBadge oldBadge = adamCaomeiBadgeAdminService.getOne(
Wrappers.lambdaQuery(AdamCaomeiBadge.class).eq(AdamCaomeiBadge::getBadgeId, param.getBadgeId()), false
);
if (oldBadge == null) {
return error("操作失败:未找到徽章");
}
AdamCaomeiBadge updateBadge = new AdamCaomeiBadge();
updateBadge.setMid(param.getMid());
updateBadge.setMid(oldBadge.getMid());
updateBadge.setDisplayStatus(param.getDisplayStatus());
updateBadge.setUpdatedAt(new java.util.Date());
return toAjax(adamCaomeiBadgeAdminService.updateById(updateBadge));
......
......@@ -26,7 +26,7 @@ public class AdamCaomeiPassportController extends BaseController {
@Autowired
private IAdamCaomeiPassportAdminService adamCaomeiPassportAdminService;
@RequiresPermissions("adam:caomei:passport:view")
@RequiresPermissions("adam:caomei:passport:list")
@GetMapping()
public String view() {
return prefix + "/passport_list";
......@@ -41,7 +41,7 @@ public class AdamCaomeiPassportController extends BaseController {
return getDataTable(pageInfo);
}
@RequiresPermissions("adam:caomei:passport:detail")
@RequiresPermissions("adam:caomei:passport:list")
@GetMapping("detail/{passportNo}")
public String detail(@PathVariable("passportNo") String passportNo, ModelMap mmap) {
AdamCaomeiPassportDetailVo detail = adamCaomeiPassportAdminService.getPassportDetail(passportNo);
......@@ -49,7 +49,7 @@ public class AdamCaomeiPassportController extends BaseController {
return prefix + "/passport_detail";
}
@RequiresPermissions("adam:caomei:passport:unbind")
@RequiresPermissions("adam:caomei:passport:edit")
@Log(title = "草莓护照-护照解绑", businessType = BusinessType.UPDATE)
@PostMapping("unbind")
@ResponseBody
......
......@@ -6,7 +6,7 @@
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-badge-edit" th:object="${badge}">
<input name="mid" th:field="*{mid}" type="hidden">
<input name="badgeId" th:field="*{badgeId}" type="hidden">
<div class="form-group">
<label class="col-sm-3 control-label is-required">徽章名称:</label>
<div class="col-sm-8">
......
......@@ -130,18 +130,18 @@
formatter: function(value, row, index) {
var actions = [];
// 详情按钮
actions.push('<a class="btn btn-info btn-sm" style="margin-right: 5px;" href="javascript:void(0)" onclick="detail(\'' + row.mid + '\')"><i class="fa fa-eye"></i>详情</a>');
actions.push('<a class="btn btn-info btn-sm" style="margin-right: 5px;" href="javascript:void(0)" onclick="detail(\'' + row.badgeId + '\')"><i class="fa fa-eye"></i>详情</a>');
// 仅下架状态可修改(编辑)
if (row.displayStatus == 0) {
actions.push('<a class="btn btn-success btn-sm ' + editFlag + '" style="margin-right: 5px;" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.mid + '\')"><i class="fa fa-edit"></i>编辑</a>');
actions.push('<a class="btn btn-success btn-sm ' + editFlag + '" style="margin-right: 5px;" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.badgeId + '\')"><i class="fa fa-edit"></i>编辑</a>');
}
// 下架/发布按钮
if (row.displayStatus == 1) {
actions.push('<a class="btn btn-danger btn-sm" style="margin-right: 5px;" href="javascript:void(0)" onclick="disable(\'' + row.mid + '\')"><i class="fa fa-arrow-down"></i>下架</a>');
actions.push('<a class="btn btn-danger btn-sm" style="margin-right: 5px;" href="javascript:void(0)" onclick="disable(\'' + row.badgeId + '\')"><i class="fa fa-arrow-down"></i>下架</a>');
} else {
actions.push('<a class="btn btn-primary btn-sm" style="margin-right: 5px;" href="javascript:void(0)" onclick="enable(\'' + row.mid + '\')"><i class="fa fa-upload"></i>发布</a>');
actions.push('<a class="btn btn-primary btn-sm" style="margin-right: 5px;" href="javascript:void(0)" onclick="enable(\'' + row.badgeId + '\')"><i class="fa fa-upload"></i>发布</a>');
}
// 领取用户按钮
......@@ -155,22 +155,22 @@
});
/* 徽章下架 */
function disable(mid) {
function disable(badgeId) {
$.modal.confirm("确认要下架该徽章吗?", function() {
$.operate.post(prefix + "/changeStatus", { "mid": mid, "displayStatus": 0 });
$.operate.post(prefix + "/changeStatus", { "badgeId": badgeId, "displayStatus": 0 });
});
}
/* 徽章发布 */
function enable(mid) {
function enable(badgeId) {
$.modal.confirm("确认要发布该徽章吗?", function() {
$.operate.post(prefix + "/changeStatus", { "mid": mid, "displayStatus": 1 });
$.operate.post(prefix + "/changeStatus", { "badgeId": badgeId, "displayStatus": 1 });
});
}
/* 详情 */
function detail(mid) {
$.modal.open("徽章详情", prefix + "/detail/" + mid);
function detail(badgeId) {
$.modal.open("徽章详情", prefix + "/detail/" + badgeId);
}
/* 领取用户 */
......@@ -181,6 +181,7 @@
}
$.modal.open("领取用户", prefix + "/claimUsers/" + badgeId);
}
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('补签详情')" />
</head>
<body class="gray-bg">
<div class="container-div" th:if="${detail != null}">
<div class="row">
<div class="col-sm-12">
<div class="ibox">
<div class="ibox-title"><h5>申请信息</h5></div>
<div class="ibox-content">
<table class="table table-bordered table-striped">
<tbody>
<tr><td class="col-sm-2">申请ID</td><td th:text="${detail.applyRecordId}">-</td></tr>
<tr><td>申请账号</td><td th:text="${detail.userId}">-</td></tr>
<tr><td>用户名</td><td th:text="${detail.nickname != null && detail.nickname != '' ? detail.nickname : '-'}">-</td></tr>
<tr><td>姓名</td><td th:text="${detail.realName != null && detail.realName != '' ? detail.realName : '-'}">-</td></tr>
<tr><td>证件号</td><td th:text="${detail.idCard != null && detail.idCard != '' ? detail.idCard : '-'}">-</td></tr>
<tr><td>申请徽章</td><td th:text="${detail.badgeName != null && detail.badgeName != '' ? detail.badgeName : '-'}">-</td></tr>
<tr><td>关联演出</td><td th:text="${detail.performanceName != null && detail.performanceName != '' ? detail.performanceName : '-'}">-</td></tr>
<tr>
<td>申请附件</td>
<td>
<span th:if="${detail.proofImageUrl == null or detail.proofImageUrl == ''}">-</span>
<a th:if="${detail.proofImageUrl != null and detail.proofImageUrl != ''}" th:href="${detail.proofImageUrl}" target="_blank">
<img th:src="${detail.proofImageUrl}" style="max-height: 90px; border-radius: 4px;"/>
</a>
</td>
</tr>
<tr>
<td>审核状态</td>
<td>
<span th:if="${detail.auditStatus == 0}" class="label label-warning">待审核</span>
<span th:if="${detail.auditStatus == 1}" class="label label-success">已通过</span>
<span th:if="${detail.auditStatus == 2}" class="label label-danger">已驳回</span>
</td>
</tr>
<tr><td>申请时间</td><td th:text="${detail.createdAt != null ? #dates.format(detail.createdAt, 'yyyy-MM-dd HH:mm:ss') : '-'}">-</td></tr>
<tr><td>审核时间</td><td th:text="${detail.updatedAt != null ? #dates.format(detail.updatedAt, 'yyyy-MM-dd HH:mm:ss') : '-'}">-</td></tr>
<tr th:if="${detail.auditStatus == 2}">
<td>驳回理由</td>
<td th:text="${detail.rejectReason != null && detail.rejectReason != '' ? detail.rejectReason : '-'}">-</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="container-div" th:if="${detail == null}">
<div class="alert alert-warning">未找到申请信息</div>
</div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
$(function() {
// 详情弹窗无需确认按钮,仅保留关闭
var index = parent.layer.getFrameIndex(window.name);
if (index) {
var $layero = parent.$("#layui-layer" + index);
$layero.find(".layui-layer-btn0").hide();
}
});
</script>
</body>
</html>
<!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="formId">
<div class="select-list">
<ul>
<li>
用户名/姓名:<input type="text" name="userName" placeholder="昵称或姓名"/>
</li>
<li>
申请状态:
<select name="auditStatus">
<option value="">全部</option>
<option value="0">待审核</option>
<option value="1">已通过</option>
<option value="2">已驳回</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="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 detailFlag = [[${@permission.hasPermi('adam:caomei:badgeApplyAudit:list')}]];
var passFlag = [[${@permission.hasPermi('adam:caomei:badgeApplyAudit:edit')}]];
var rejectFlag = [[${@permission.hasPermi('adam:caomei:badgeApplyAudit:edit')}]];
var prefix = ctx + "adam/caomei/badgeApplyAudit";
$(function() {
var options = {
url: prefix + "/list",
formId: "formId",
modalName: "补签审核",
columns: [
{ field: 'applyRecordId', title: '申请ID' },
{ field: 'userId', title: '申请账号' },
{ field: 'realName', title: '姓名', formatter: function(v) { return v || '-'; } },
{ field: 'idCard', title: '证件号', formatter: function(v) { return v || '-'; } },
{ field: 'badgeName', title: '申请徽章', formatter: function(v) { return v || '-'; } },
{ field: 'performanceName', title: '关联演出', formatter: function(v) { return v || '-'; } },
{
field: 'proofImageUrl',
title: '申请附件',
align: 'center',
formatter: function(value) {
if (!value) return '-';
return '<img src="' + value + '" style="height:32px;max-width:60px;cursor:pointer;border-radius:3px;" onclick=\'viewImage(' + JSON.stringify(value) + ')\' />';
}
},
{
field: 'auditStatus',
title: '审核状态',
align: 'center',
formatter: function(value) {
if (value === 0) return '<span class="label label-warning">待审核</span>';
if (value === 1) return '<span class="label label-success">已通过</span>';
if (value === 2) return '<span class="label label-danger">已驳回</span>';
return '-';
}
},
{
title: '操作',
align: 'center',
formatter: function(value, row) {
var actions = [];
actions.push('<a class="btn btn-info btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick=\'detail(' + JSON.stringify(row.applyRecordId) + ')\'><i class="fa fa-eye"></i>详情</a> ');
if (row.auditStatus === 0) {
actions.push('<a class="btn btn-success btn-xs ' + passFlag + '" href="javascript:void(0)" onclick=\'passAudit(' + JSON.stringify(row.applyRecordId) + ')\'><i class="fa fa-check"></i>通过</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + rejectFlag + '" href="javascript:void(0)" onclick=\'rejectAudit(' + JSON.stringify(row.applyRecordId) + ')\'><i class="fa fa-close"></i>驳回</a>');
}
return actions.join('');
}
}
]
};
$.table.init(options);
});
function viewImage(url) {
window.open(url, "_blank");
}
function detail(applyRecordId) {
$.modal.open("补签详情", prefix + "/detail/" + encodeURIComponent(applyRecordId));
}
function passAudit(applyRecordId) {
$.modal.confirm("确认审核通过并为用户发放对应徽章吗?", function() {
$.operate.post(prefix + "/pass", { applyRecordId: applyRecordId });
});
}
function rejectAudit(applyRecordId) {
layer.prompt({
title: "请输入驳回理由",
formType: 2,
maxlength: 255
}, function(value, index) {
layer.close(index);
var reason = $.trim(value);
if (!reason) {
$.modal.msgError("驳回理由不能为空");
return;
}
$.operate.post(prefix + "/reject", { applyRecordId: applyRecordId, rejectReason: reason });
});
}
</script>
</body>
</html>
......@@ -51,8 +51,8 @@
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var unbindFlag = [[${@permission.hasPermi('adam:caomei:passport:unbind')}]];
var detailFlag = [[${@permission.hasPermi('adam:caomei:passport:detail')}]];
var unbindFlag = [[${@permission.hasPermi('adam:caomei:passport:edit')}]];
var detailFlag = [[${@permission.hasPermi('adam:caomei:passport:list')}]];
var prefix = ctx + "adam/caomei/passport";
$(function() {
......
package com.liquidnet.client.admin.zhengzai.adam.service;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.adam.dto.param.AdamCaomeiBadgeApplyAuditSearchParam;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiBadgeApplyAuditDetailVo;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiBadgeApplyAuditVo;
public interface IAdamCaomeiBadgeApplyAuditAdminService {
PageInfo<AdamCaomeiBadgeApplyAuditVo> listApplyAudits(AdamCaomeiBadgeApplyAuditSearchParam param);
AdamCaomeiBadgeApplyAuditDetailVo getApplyAuditDetail(String applyRecordId);
boolean passApplyAudit(String applyRecordId);
boolean rejectApplyAudit(String applyRecordId, String rejectReason);
}
package com.liquidnet.client.admin.zhengzai.adam.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamCaomeiBadgeApplyAuditAdminService;
import com.liquidnet.service.adam.dto.AdamCaomeiBadgeApplyAuditDetailDto;
import com.liquidnet.service.adam.dto.AdamCaomeiBadgeApplyAuditDto;
import com.liquidnet.service.adam.dto.param.AdamCaomeiBadgeApplyAuditSearchParam;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiBadgeApplyAuditDetailVo;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiBadgeApplyAuditVo;
import com.liquidnet.service.adam.entity.AdamCaomeiBadgeApplyRecord;
import com.liquidnet.service.adam.mapper.AdamCaomeiBadgeApplyRecordMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class AdamCaomeiBadgeApplyAuditAdminServiceImpl implements IAdamCaomeiBadgeApplyAuditAdminService {
@Autowired
private AdamCaomeiBadgeApplyRecordMapper badgeApplyRecordMapper;
@Override
public PageInfo<AdamCaomeiBadgeApplyAuditVo> listApplyAudits(AdamCaomeiBadgeApplyAuditSearchParam param) {
if (param == null) {
param = new AdamCaomeiBadgeApplyAuditSearchParam();
}
List<AdamCaomeiBadgeApplyAuditDto> rows = badgeApplyRecordMapper.selectAuditList(
StringUtils.trimToEmpty(param.getUserName()),
param.getAuditStatus()
);
PageInfo<AdamCaomeiBadgeApplyAuditDto> dtoPage = new PageInfo<>(rows);
List<AdamCaomeiBadgeApplyAuditVo> voList = dtoPage.getList().stream().map(item -> {
AdamCaomeiBadgeApplyAuditVo vo = new AdamCaomeiBadgeApplyAuditVo();
BeanUtils.copyProperties(item, vo);
vo.setIdCard(maskIdCard(item.getIdCard()));
return vo;
}).collect(Collectors.toList());
PageInfo<AdamCaomeiBadgeApplyAuditVo> voPage = new PageInfo<>(voList);
voPage.setTotal(dtoPage.getTotal());
return voPage;
}
@Override
public AdamCaomeiBadgeApplyAuditDetailVo getApplyAuditDetail(String applyRecordId) {
if (StringUtils.isBlank(applyRecordId)) {
return null;
}
AdamCaomeiBadgeApplyAuditDetailDto detail = badgeApplyRecordMapper.selectAuditDetailByApplyRecordId(applyRecordId.trim());
if (detail == null) {
return null;
}
AdamCaomeiBadgeApplyAuditDetailVo vo = new AdamCaomeiBadgeApplyAuditDetailVo();
BeanUtils.copyProperties(detail, vo);
vo.setIdCard(maskIdCard(detail.getIdCard()));
return vo;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean passApplyAudit(String applyRecordId) {
if (StringUtils.isBlank(applyRecordId)) {
return false;
}
AdamCaomeiBadgeApplyRecord record = badgeApplyRecordMapper.selectOne(
Wrappers.lambdaQuery(AdamCaomeiBadgeApplyRecord.class)
.eq(AdamCaomeiBadgeApplyRecord::getApplyRecordId, applyRecordId.trim())
.last("limit 1")
);
if (record == null || record.getAuditStatus() == null || record.getAuditStatus() != 0) {
return false;
}
if (StringUtils.isBlank(record.getUserId()) || StringUtils.isBlank(record.getBadgeId())) {
return false;
}
int updated = badgeApplyRecordMapper.passAudit(applyRecordId.trim());
if (updated <= 0) {
return false;
}
badgeApplyRecordMapper.issueBadgeIfAbsent(record.getUserId(), record.getBadgeId());
return true;
}
@Override
public boolean rejectApplyAudit(String applyRecordId, String rejectReason) {
if (StringUtils.isBlank(applyRecordId) || StringUtils.isBlank(rejectReason)) {
return false;
}
return badgeApplyRecordMapper.rejectAudit(applyRecordId.trim(), rejectReason.trim()) > 0;
}
private static String maskIdCard(String idCard) {
if (StringUtils.isBlank(idCard)) {
// 未实名或无证件信息
return "";
}
if (idCard.length() > 8) {
return idCard.substring(0, 4) + "****" + idCard.substring(idCard.length() - 4);
}
return "****";
}
}
......@@ -13,6 +13,7 @@ import com.liquidnet.service.adam.entity.AdamCaomeiPassport;
import com.liquidnet.service.adam.entity.AdamRealName;
import com.liquidnet.service.adam.entity.AdamUser;
import com.liquidnet.service.adam.entity.AdamUserInfo;
import com.liquidnet.service.adam.mapper.AdamCaomeiBadgeMapper;
import com.liquidnet.service.adam.mapper.AdamCaomeiPassportMapper;
import com.liquidnet.service.adam.mapper.AdamRealNameMapper;
import com.liquidnet.service.adam.mapper.AdamUserInfoMapper;
......@@ -22,6 +23,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collections;
import java.util.Date;
......@@ -40,6 +42,8 @@ public class AdamCaomeiPassportAdminServiceImpl implements IAdamCaomeiPassportAd
private AdamUserInfoMapper adamUserInfoMapper;
@Autowired
private AdamRealNameMapper adamRealNameMapper;
@Autowired
private AdamCaomeiBadgeMapper adamCaomeiBadgeMapper;
@Override
public PageInfo<AdamCaomeiPassportListVo> listPassports(AdamCaomeiPassportSearchParam param) {
......@@ -125,6 +129,7 @@ public class AdamCaomeiPassportAdminServiceImpl implements IAdamCaomeiPassportAd
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean unbindPassport(String passportNo) {
if (StringUtils.isBlank(passportNo)) {
return false;
......@@ -139,12 +144,21 @@ public class AdamCaomeiPassportAdminServiceImpl implements IAdamCaomeiPassportAd
if (passport.getStatus() == null || passport.getStatus() != 1) {
return false;
}
String uid = passport.getUserId();
Date now = new Date();
passport.setStatus(0);
passport.setUserId("");
passport.setUnboundAt(now);
passport.setUpdatedAt(now);
return adamCaomeiPassportMapper.updateById(passport) > 0;
boolean updated = adamCaomeiPassportMapper.updateById(passport) > 0;
if (!updated) {
return false;
}
if (StringUtils.isNotBlank(uid)) {
// 解绑后,清理该用户由“绑定护照”自动发放的护照纪念徽章
adamCaomeiBadgeMapper.deletePassportTypeBadgesByUid(uid);
}
return true;
}
private static String maskMobile(String mobile) {
......
package com.liquidnet.service.adam.dto;
import lombok.Data;
import java.util.Date;
@Data
public class AdamCaomeiBadgeApplyAuditDetailDto {
private String applyRecordId;
private String userId;
private String nickname;
private String realName;
private String idCard;
private String badgeId;
private String badgeName;
private String performanceId;
private String performanceName;
private String proofImageUrl;
private Integer auditStatus;
private String rejectReason;
private Date createdAt;
private Date updatedAt;
}
package com.liquidnet.service.adam.dto;
import lombok.Data;
import java.util.Date;
@Data
public class AdamCaomeiBadgeApplyAuditDto {
private String applyRecordId;
private String userId;
private String nickname;
private String realName;
private String idCard;
private String badgeName;
private String performanceName;
private String proofImageUrl;
private Integer auditStatus;
private Date createdAt;
}
package com.liquidnet.service.adam.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("adam_caomei_badge_apply_record")
public class AdamCaomeiBadgeApplyRecord implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
private String applyRecordId;
private String userId;
private String badgeId;
private String performanceId;
private String proofImageUrl;
private Integer auditStatus;
private String rejectReason;
private Date createdAt;
private Date updatedAt;
}
package com.liquidnet.service.adam.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.adam.dto.AdamCaomeiBadgeApplyAuditDetailDto;
import com.liquidnet.service.adam.dto.AdamCaomeiBadgeApplyAuditDto;
import com.liquidnet.service.adam.entity.AdamCaomeiBadgeApplyRecord;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
public interface AdamCaomeiBadgeApplyRecordMapper extends BaseMapper<AdamCaomeiBadgeApplyRecord> {
@Select({
"<script>",
"select ",
"ar.apply_record_id as applyRecordId,",
"ifnull(u.mobile, '') as userId,",
"ifnull(ui.nickname, '') as nickname,",
"ifnull(arn.name, '') as realName,",
"ifnull(arn.id_card, '') as idCard,",
"ifnull(b.name, '') as badgeName,",
"ifnull(kp.title, ar.performance_id) as performanceName,",
"ar.proof_image_url as proofImageUrl,",
"ar.audit_status as auditStatus,",
"ar.created_at as createdAt ",
"from adam_caomei_badge_apply_record ar ",
"left join adam_user u on ar.user_id = u.uid ",
"left join adam_user_info ui on ar.user_id = ui.uid ",
"left join (",
" select r.uid, r.name, r.id_card ",
" from adam_real_name r ",
" inner join (",
" select uid, max(mid) as max_mid from adam_real_name where state = 1 group by uid",
" ) rm on r.uid = rm.uid and r.mid = rm.max_mid and r.state = 1",
") arn on ar.user_id = arn.uid ",
"left join adam_caomei_badge b on ar.badge_id = b.badge_id ",
"left join kylin_performances kp on ar.performance_id = kp.performances_id ",
"where 1 = 1 ",
"<if test='userName != null and userName != \"\"'>",
"and (ui.nickname like concat('%', #{userName}, '%') or arn.name like concat('%', #{userName}, '%')) ",
"</if>",
"<if test='auditStatus != null'>",
"and ar.audit_status = #{auditStatus} ",
"</if>",
"order by case when ar.audit_status = 0 then 0 else 1 end asc, ar.created_at desc",
"</script>"
})
List<AdamCaomeiBadgeApplyAuditDto> selectAuditList(@Param("userName") String userName,
@Param("auditStatus") Integer auditStatus);
@Select({
"select ",
"ar.apply_record_id as applyRecordId,",
"ifnull(u.mobile, '') as userId,",
"ifnull(ui.nickname, '') as nickname,",
"ifnull(arn.name, '') as realName,",
"ifnull(arn.id_card, '') as idCard,",
"ar.badge_id as badgeId,",
"ifnull(b.name, '') as badgeName,",
"ar.performance_id as performanceId,",
"ifnull(kp.title, ar.performance_id) as performanceName,",
"ar.proof_image_url as proofImageUrl,",
"ar.audit_status as auditStatus,",
"ifnull(ar.reject_reason, '') as rejectReason,",
"ar.created_at as createdAt,",
"ar.updated_at as updatedAt ",
"from adam_caomei_badge_apply_record ar ",
"left join adam_user u on ar.user_id = u.uid ",
"left join adam_user_info ui on ar.user_id = ui.uid ",
"left join (",
" select r.uid, r.name, r.id_card ",
" from adam_real_name r ",
" inner join (select uid, max(mid) as max_mid from adam_real_name where state = 1 group by uid) rm ",
" on r.uid = rm.uid and r.mid = rm.max_mid and r.state = 1",
") arn on ar.user_id = arn.uid ",
"left join adam_caomei_badge b on ar.badge_id = b.badge_id ",
"left join kylin_performances kp on ar.performance_id = kp.performances_id ",
"where ar.apply_record_id = #{applyRecordId} ",
"limit 1"
})
AdamCaomeiBadgeApplyAuditDetailDto selectAuditDetailByApplyRecordId(@Param("applyRecordId") String applyRecordId);
@Update({
"update adam_caomei_badge_apply_record ",
"set audit_status = 1, reject_reason = null, updated_at = now() ",
"where apply_record_id = #{applyRecordId} and audit_status = 0"
})
int passAudit(@Param("applyRecordId") String applyRecordId);
@Update({
"update adam_caomei_badge_apply_record ",
"set audit_status = 2, reject_reason = #{rejectReason}, updated_at = now() ",
"where apply_record_id = #{applyRecordId} and audit_status = 0"
})
int rejectAudit(@Param("applyRecordId") String applyRecordId, @Param("rejectReason") String rejectReason);
@Insert({
"insert ignore into adam_caomei_user_badge (user_id, badge_id, source, created_at) ",
"values (#{userId}, #{badgeId}, 3, now())"
})
int issueBadgeIfAbsent(@Param("userId") String userId, @Param("badgeId") String badgeId);
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.adam.dto.AdamCaomeiBadgeClaimCountDto;
import com.liquidnet.service.adam.dto.AdamCaomeiBadgeClaimUserDto;
import com.liquidnet.service.adam.entity.AdamCaomeiBadge;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
......@@ -39,4 +40,11 @@ public interface AdamCaomeiBadgeMapper extends BaseMapper<AdamCaomeiBadge> {
"order by ub.created_at desc"
})
List<AdamCaomeiBadgeClaimUserDto> selectClaimUsersByBadgeId(@Param("badgeId") String badgeId);
@Delete({
"delete ub from adam_caomei_user_badge ub ",
"inner join adam_caomei_badge b on ub.badge_id = b.badge_id ",
"where ub.user_id = #{uid} and ub.source = 1 and b.type = 1"
})
int deletePassportTypeBadgesByUid(@Param("uid") String uid);
}
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