记得上下班打卡 | 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; 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.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController; import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult; import com.liquidnet.client.admin.common.core.domain.AjaxResult;
...@@ -32,7 +33,7 @@ public class AdamCaomeiBadgeController extends BaseController { ...@@ -32,7 +33,7 @@ public class AdamCaomeiBadgeController extends BaseController {
@Autowired @Autowired
private IAdamCaomeiBadgeAdminService adamCaomeiBadgeAdminService; private IAdamCaomeiBadgeAdminService adamCaomeiBadgeAdminService;
@RequiresPermissions("adam:caomei:badge:view") @RequiresPermissions("adam:caomei:badge:list")
@GetMapping() @GetMapping()
public String view() { public String view() {
return prefix + "/badge_list"; return prefix + "/badge_list";
...@@ -47,6 +48,7 @@ public class AdamCaomeiBadgeController extends BaseController { ...@@ -47,6 +48,7 @@ public class AdamCaomeiBadgeController extends BaseController {
return getDataTable(pageInfo); return getDataTable(pageInfo);
} }
@RequiresPermissions("adam:caomei:badge:add")
@GetMapping("add") @GetMapping("add")
public String add() { public String add() {
return prefix + "/badge_add"; return prefix + "/badge_add";
...@@ -79,15 +81,17 @@ public class AdamCaomeiBadgeController extends BaseController { ...@@ -79,15 +81,17 @@ public class AdamCaomeiBadgeController extends BaseController {
return toAjax(adamCaomeiBadgeAdminService.save(badge)); return toAjax(adamCaomeiBadgeAdminService.save(badge));
} }
@RequiresPermissions("adam:caomei:badge:view") @RequiresPermissions("adam:caomei:badge:list")
@GetMapping("detail/{mid}") @GetMapping("detail/{badgeId}")
public String detail(@PathVariable("mid") Long mid, ModelMap mmap) { public String detail(@PathVariable("badgeId") String badgeId, ModelMap mmap) {
AdamCaomeiBadge badge = adamCaomeiBadgeAdminService.getById(mid); AdamCaomeiBadge badge = adamCaomeiBadgeAdminService.getOne(
Wrappers.lambdaQuery(AdamCaomeiBadge.class).eq(AdamCaomeiBadge::getBadgeId, badgeId), false
);
mmap.put("badge", badge); mmap.put("badge", badge);
return prefix + "/badge_detail"; return prefix + "/badge_detail";
} }
@RequiresPermissions("adam:caomei:badge:view") @RequiresPermissions("adam:caomei:badge:list")
@GetMapping("claimUsers/{badgeId}") @GetMapping("claimUsers/{badgeId}")
public String claimUsers(@PathVariable("badgeId") String badgeId, ModelMap mmap) { public String claimUsers(@PathVariable("badgeId") String badgeId, ModelMap mmap) {
mmap.put("badgeId", badgeId); mmap.put("badgeId", badgeId);
...@@ -103,9 +107,12 @@ public class AdamCaomeiBadgeController extends BaseController { ...@@ -103,9 +107,12 @@ public class AdamCaomeiBadgeController extends BaseController {
return getDataTable(pageInfo); return getDataTable(pageInfo);
} }
@GetMapping("edit/{mid}") @RequiresPermissions("adam:caomei:badge:edit")
public String edit(@PathVariable("mid") Long mid, ModelMap mmap) { @GetMapping("edit/{badgeId}")
AdamCaomeiBadge badge = adamCaomeiBadgeAdminService.getById(mid); 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); mmap.put("badge", badge);
return prefix + "/badge_edit"; return prefix + "/badge_edit";
} }
...@@ -115,12 +122,15 @@ public class AdamCaomeiBadgeController extends BaseController { ...@@ -115,12 +122,15 @@ public class AdamCaomeiBadgeController extends BaseController {
@PostMapping("edit") @PostMapping("edit")
@ResponseBody @ResponseBody
public AjaxResult editSave(AdamCaomeiBadgeParam param) { 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) { if (oldBadge == null || oldBadge.getDisplayStatus() == 1) {
return error("已发布的徽章不允许修改"); return error("已发布的徽章不允许修改");
} }
AdamCaomeiBadge badge = new AdamCaomeiBadge(); AdamCaomeiBadge badge = new AdamCaomeiBadge();
BeanUtils.copyProperties(param, badge); BeanUtils.copyProperties(param, badge);
badge.setMid(oldBadge.getMid());
badge.setUpdatedAt(new java.util.Date()); badge.setUpdatedAt(new java.util.Date());
if (badge.getType() != null && badge.getType() != 2) { if (badge.getType() != null && badge.getType() != 2) {
badge.setPerformanceId(""); badge.setPerformanceId("");
...@@ -133,8 +143,14 @@ public class AdamCaomeiBadgeController extends BaseController { ...@@ -133,8 +143,14 @@ public class AdamCaomeiBadgeController extends BaseController {
@PostMapping("changeStatus") @PostMapping("changeStatus")
@ResponseBody @ResponseBody
public AjaxResult changeStatus(AdamCaomeiBadgeParam param) { 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(); AdamCaomeiBadge updateBadge = new AdamCaomeiBadge();
updateBadge.setMid(param.getMid()); updateBadge.setMid(oldBadge.getMid());
updateBadge.setDisplayStatus(param.getDisplayStatus()); updateBadge.setDisplayStatus(param.getDisplayStatus());
updateBadge.setUpdatedAt(new java.util.Date()); updateBadge.setUpdatedAt(new java.util.Date());
return toAjax(adamCaomeiBadgeAdminService.updateById(updateBadge)); return toAjax(adamCaomeiBadgeAdminService.updateById(updateBadge));
......
...@@ -26,7 +26,7 @@ public class AdamCaomeiPassportController extends BaseController { ...@@ -26,7 +26,7 @@ public class AdamCaomeiPassportController extends BaseController {
@Autowired @Autowired
private IAdamCaomeiPassportAdminService adamCaomeiPassportAdminService; private IAdamCaomeiPassportAdminService adamCaomeiPassportAdminService;
@RequiresPermissions("adam:caomei:passport:view") @RequiresPermissions("adam:caomei:passport:list")
@GetMapping() @GetMapping()
public String view() { public String view() {
return prefix + "/passport_list"; return prefix + "/passport_list";
...@@ -41,7 +41,7 @@ public class AdamCaomeiPassportController extends BaseController { ...@@ -41,7 +41,7 @@ public class AdamCaomeiPassportController extends BaseController {
return getDataTable(pageInfo); return getDataTable(pageInfo);
} }
@RequiresPermissions("adam:caomei:passport:detail") @RequiresPermissions("adam:caomei:passport:list")
@GetMapping("detail/{passportNo}") @GetMapping("detail/{passportNo}")
public String detail(@PathVariable("passportNo") String passportNo, ModelMap mmap) { public String detail(@PathVariable("passportNo") String passportNo, ModelMap mmap) {
AdamCaomeiPassportDetailVo detail = adamCaomeiPassportAdminService.getPassportDetail(passportNo); AdamCaomeiPassportDetailVo detail = adamCaomeiPassportAdminService.getPassportDetail(passportNo);
...@@ -49,7 +49,7 @@ public class AdamCaomeiPassportController extends BaseController { ...@@ -49,7 +49,7 @@ public class AdamCaomeiPassportController extends BaseController {
return prefix + "/passport_detail"; return prefix + "/passport_detail";
} }
@RequiresPermissions("adam:caomei:passport:unbind") @RequiresPermissions("adam:caomei:passport:edit")
@Log(title = "草莓护照-护照解绑", businessType = BusinessType.UPDATE) @Log(title = "草莓护照-护照解绑", businessType = BusinessType.UPDATE)
@PostMapping("unbind") @PostMapping("unbind")
@ResponseBody @ResponseBody
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-badge-edit" th:object="${badge}"> <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"> <div class="form-group">
<label class="col-sm-3 control-label is-required">徽章名称:</label> <label class="col-sm-3 control-label is-required">徽章名称:</label>
<div class="col-sm-8"> <div class="col-sm-8">
......
...@@ -130,18 +130,18 @@ ...@@ -130,18 +130,18 @@
formatter: function(value, row, index) { formatter: function(value, row, index) {
var actions = []; 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) { 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) { 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 { } 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 @@ ...@@ -155,22 +155,22 @@
}); });
/* 徽章下架 */ /* 徽章下架 */
function disable(mid) { function disable(badgeId) {
$.modal.confirm("确认要下架该徽章吗?", function() { $.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() { $.modal.confirm("确认要发布该徽章吗?", function() {
$.operate.post(prefix + "/changeStatus", { "mid": mid, "displayStatus": 1 }); $.operate.post(prefix + "/changeStatus", { "badgeId": badgeId, "displayStatus": 1 });
}); });
} }
/* 详情 */ /* 详情 */
function detail(mid) { function detail(badgeId) {
$.modal.open("徽章详情", prefix + "/detail/" + mid); $.modal.open("徽章详情", prefix + "/detail/" + badgeId);
} }
/* 领取用户 */ /* 领取用户 */
...@@ -181,6 +181,7 @@ ...@@ -181,6 +181,7 @@
} }
$.modal.open("领取用户", prefix + "/claimUsers/" + badgeId); $.modal.open("领取用户", prefix + "/claimUsers/" + badgeId);
} }
</script> </script>
</body> </body>
</html> </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 @@ ...@@ -51,8 +51,8 @@
</div> </div>
<th:block th:include="include :: footer" /> <th:block th:include="include :: footer" />
<script th:inline="javascript"> <script th:inline="javascript">
var unbindFlag = [[${@permission.hasPermi('adam:caomei:passport:unbind')}]]; var unbindFlag = [[${@permission.hasPermi('adam:caomei:passport:edit')}]];
var detailFlag = [[${@permission.hasPermi('adam:caomei:passport:detail')}]]; var detailFlag = [[${@permission.hasPermi('adam:caomei:passport:list')}]];
var prefix = ctx + "adam/caomei/passport"; var prefix = ctx + "adam/caomei/passport";
$(function() { $(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; ...@@ -13,6 +13,7 @@ import com.liquidnet.service.adam.entity.AdamCaomeiPassport;
import com.liquidnet.service.adam.entity.AdamRealName; import com.liquidnet.service.adam.entity.AdamRealName;
import com.liquidnet.service.adam.entity.AdamUser; import com.liquidnet.service.adam.entity.AdamUser;
import com.liquidnet.service.adam.entity.AdamUserInfo; 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.AdamCaomeiPassportMapper;
import com.liquidnet.service.adam.mapper.AdamRealNameMapper; import com.liquidnet.service.adam.mapper.AdamRealNameMapper;
import com.liquidnet.service.adam.mapper.AdamUserInfoMapper; import com.liquidnet.service.adam.mapper.AdamUserInfoMapper;
...@@ -22,6 +23,7 @@ import org.apache.commons.lang3.StringUtils; ...@@ -22,6 +23,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
...@@ -40,6 +42,8 @@ public class AdamCaomeiPassportAdminServiceImpl implements IAdamCaomeiPassportAd ...@@ -40,6 +42,8 @@ public class AdamCaomeiPassportAdminServiceImpl implements IAdamCaomeiPassportAd
private AdamUserInfoMapper adamUserInfoMapper; private AdamUserInfoMapper adamUserInfoMapper;
@Autowired @Autowired
private AdamRealNameMapper adamRealNameMapper; private AdamRealNameMapper adamRealNameMapper;
@Autowired
private AdamCaomeiBadgeMapper adamCaomeiBadgeMapper;
@Override @Override
public PageInfo<AdamCaomeiPassportListVo> listPassports(AdamCaomeiPassportSearchParam param) { public PageInfo<AdamCaomeiPassportListVo> listPassports(AdamCaomeiPassportSearchParam param) {
...@@ -125,6 +129,7 @@ public class AdamCaomeiPassportAdminServiceImpl implements IAdamCaomeiPassportAd ...@@ -125,6 +129,7 @@ public class AdamCaomeiPassportAdminServiceImpl implements IAdamCaomeiPassportAd
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public boolean unbindPassport(String passportNo) { public boolean unbindPassport(String passportNo) {
if (StringUtils.isBlank(passportNo)) { if (StringUtils.isBlank(passportNo)) {
return false; return false;
...@@ -139,12 +144,21 @@ public class AdamCaomeiPassportAdminServiceImpl implements IAdamCaomeiPassportAd ...@@ -139,12 +144,21 @@ public class AdamCaomeiPassportAdminServiceImpl implements IAdamCaomeiPassportAd
if (passport.getStatus() == null || passport.getStatus() != 1) { if (passport.getStatus() == null || passport.getStatus() != 1) {
return false; return false;
} }
String uid = passport.getUserId();
Date now = new Date(); Date now = new Date();
passport.setStatus(0); passport.setStatus(0);
passport.setUserId(""); passport.setUserId("");
passport.setUnboundAt(now); passport.setUnboundAt(now);
passport.setUpdatedAt(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) { 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; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.adam.dto.AdamCaomeiBadgeClaimCountDto; import com.liquidnet.service.adam.dto.AdamCaomeiBadgeClaimCountDto;
import com.liquidnet.service.adam.dto.AdamCaomeiBadgeClaimUserDto; import com.liquidnet.service.adam.dto.AdamCaomeiBadgeClaimUserDto;
import com.liquidnet.service.adam.entity.AdamCaomeiBadge; import com.liquidnet.service.adam.entity.AdamCaomeiBadge;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
...@@ -39,4 +40,11 @@ public interface AdamCaomeiBadgeMapper extends BaseMapper<AdamCaomeiBadge> { ...@@ -39,4 +40,11 @@ public interface AdamCaomeiBadgeMapper extends BaseMapper<AdamCaomeiBadge> {
"order by ub.created_at desc" "order by ub.created_at desc"
}) })
List<AdamCaomeiBadgeClaimUserDto> selectClaimUsersByBadgeId(@Param("badgeId") String badgeId); 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