diff --git a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareAddressManageController.java b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareAddressManageController.java index d8104f8..8762921 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareAddressManageController.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareAddressManageController.java @@ -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); + } + /** * 地址列表 * diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareAddressManageService.java b/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareAddressManageService.java new file mode 100644 index 0000000..f505b48 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareAddressManageService.java @@ -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 { + + /** + * 仅导出有收货地址的人员,每人一行,多地址优先取默认地址。 + * 无返回对象,文件内容直接写入响应。 + * + * @param response 文件下载响应,输出工号、姓名、收货地址三列的 XLSX 文件 + */ + void exportAllAddress(HttpServletResponse response); +} diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareAddressManageServiceImpl.java b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareAddressManageServiceImpl.java new file mode 100644 index 0000000..d64c279 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareAddressManageServiceImpl.java @@ -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 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 list = listMap(sql); + + // 工号按字符串导出,保留前导零;收货地址只包含省市区县和详细地址。 + List 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); + } +} diff --git a/src/main/resources/views/platform/zhgh/welfare/addressManage/index.html b/src/main/resources/views/platform/zhgh/welfare/addressManage/index.html index ceee816..3b0b718 100644 --- a/src/main/resources/views/platform/zhgh/welfare/addressManage/index.html +++ b/src/main/resources/views/platform/zhgh/welfare/addressManage/index.html @@ -7,6 +7,7 @@ layout("/layouts/platform.html"){ 新增地址 + 导出所有人收货地址