整改收货地址可以导出全部的福利地址

This commit is contained in:
2026-11-05 11:10:12 +08:00
parent 6b0586b638
commit d8f6298dd8
5 changed files with 129 additions and 4 deletions
@@ -6,6 +6,7 @@ import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.welfare.model.WelfareMemberAddress;
import com.budwk.app.zhgh.welfare.service.WelfareAddressManageService;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
@@ -18,6 +19,8 @@ import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
/**
* @ClassName WelfareAddressManageController
* @Description 福利地址管理
@@ -31,12 +34,28 @@ public class WelfareAddressManageController {
@Inject
private BaseService baseService;
@Inject
private WelfareAddressManageService welfareAddressManageService;
@At("")
@Ok("beetl:/platform/zhgh/welfare/addressManage/index.html")
@SaCheckPermission("welfare.addressManage")
public void index() {
}
/**
* 导出全部用户的收货地址,不接收用户或分页筛选参数。
* 无返回对象,文件内容直接写入响应。
*
* @param response 文件下载响应,输出包含工号、姓名、收货地址三列的 XLSX 文件
*/
@At
@Ok("void")
@SaCheckPermission("welfare.addressManage")
public void exportAllAddress(HttpServletResponse response) {
welfareAddressManageService.exportAllAddress(response);
}
/**
* 地址列表
*
@@ -0,0 +1,20 @@
package com.budwk.app.zhgh.welfare.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.welfare.model.WelfareMemberAddress;
import javax.servlet.http.HttpServletResponse;
/**
* 福利收货地址管理服务。
*/
public interface WelfareAddressManageService extends BaseService<WelfareMemberAddress> {
/**
* 仅导出有收货地址的人员,每人一行,多地址优先取默认地址。
* 无返回对象,文件内容直接写入响应。
*
* @param response 文件下载响应,输出工号、姓名、收货地址三列的 XLSX 文件
*/
void exportAllAddress(HttpServletResponse response);
}
@@ -0,0 +1,70 @@
package com.budwk.app.zhgh.welfare.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.zhgh.welfare.model.WelfareMemberAddress;
import com.budwk.app.zhgh.welfare.service.WelfareAddressManageService;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
* 汇总用户与福利地址信息,生成每人一行的收货地址表。
*/
@IocBean(args = {"refer:dao"})
public class WelfareAddressManageServiceImpl extends BaseServiceImpl<WelfareMemberAddress> implements WelfareAddressManageService {
public WelfareAddressManageServiceImpl(Dao dao) {
super(dao);
}
/**
* 导出有收货地址人员的工号、姓名和完整收货地址,按工号排序。
* 无返回对象,XLSX 文件直接写入响应。
*
* @param response 文件下载响应,输出工号、姓名、收货地址三列的 XLSX 文件
*/
@Override
public void exportAllAddress(HttpServletResponse response) {
// 沿用福利地址导出的排序规则:默认地址优先;未设默认或多个默认时按 ID 稳定选取一条。
// 仅关联存在地址记录的人员;逐段处理空值,避免部分地区字段为空导致整条地址丢失。
Sql sql = Sqls.create("""
SELECT
u.loginname,
u.username,
CONCAT(IFNULL(a.province, ''), IFNULL(a.city, ''),
IFNULL(a.county, ''), IFNULL(a.addressDetail, '')) AS address
FROM sys_user u
INNER JOIN (
SELECT userId, province, city, county, addressDetail,
ROW_NUMBER() OVER (PARTITION BY userId ORDER BY isDefault DESC, id) AS rn
FROM welfare_member_address
) a ON a.userId = u.id AND a.rn = 1
ORDER BY u.loginname, u.id
""");
List<NutMap> list = listMap(sql);
// 工号按字符串导出,保留前导零;收货地址只包含省市区县和详细地址。
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("工号", "loginname", 20));
entities.add(new ExcelExportEntity("姓名", "username", 20));
entities.add(new ExcelExportEntity("收货地址", "address", 70));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, list);
// 全局下载方法负责写入响应并关闭工作簿。
CommonDownloadUtil.download("所有人收货地址.xlsx", workbook, response);
}
}
@@ -7,6 +7,7 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<table-tool :app="this" label="收货地址">
<el-button @click="openAddress" size="small" type="primary">新增地址</el-button>
<el-button v-if="$auth.hasRole('SYSADMIN')" @click="exportAllAddress" size="small" type="primary">导出所有人收货地址</el-button>
</table-tool>
<el-table
@@ -74,6 +75,10 @@ layout("/layouts/platform.html"){
"address-dialog": ADDRESS_DIALOG
},
methods: {
// 导出全部用户的收货地址,不传当前用户或分页条件;下载和 loading 复用全局方法。
exportAllAddress() {
this.$downLoad("/platform/welfare/addressManage/exportAllAddress", {})
},
selectUserAddress(){
this.pageData()
},
@@ -16,11 +16,22 @@ layout("/layouts/platform_h5.html"){
text-overflow: unset !important;
white-space: normal !important;
}
.sign-success .label{
color: #0e9558;
/* 仅突出当前活动列表的报名结果,姓名过长时完整换行展示。 */
.table-list-container .sign-success {
align-items: baseline;
line-height: 28px;
}
.sign-success .value{
color: #0e9558;
.table-list-container .sign-success .label {
color: #087f4f;
font-size: 16px;
font-weight: 600;
}
.table-list-container .sign-success .value {
min-width: 0;
color: #087f4f;
font-size: 18px;
font-weight: 700;
overflow-wrap: anywhere;
}
</style>