整改收货地址可以导出全部的福利地址
This commit is contained in:
+19
@@ -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);
|
||||
}
|
||||
+70
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user