|
@@ -9,10 +9,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.deepoove.poi.XWPFTemplate;
|
|
|
import com.deepoove.poi.config.Configure;
|
|
|
-import com.deepoove.poi.data.RowRenderData;
|
|
|
import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
|
|
|
import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
|
|
|
+import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
|
|
@@ -23,10 +23,13 @@ import com.qunzhixinxi.hnqz.admin.enums.PackageFinishStatusEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.SettleStatusEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
|
|
|
+import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.SysDeptSubService;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.WmPayOffService;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.WmScorePackageSettleNoteService;
|
|
|
+import com.qunzhixinxi.hnqz.admin.util.AmountToCNUtil;
|
|
|
import com.qunzhixinxi.hnqz.admin.util.OsEnvUtils;
|
|
|
import com.qunzhixinxi.hnqz.common.core.util.R;
|
|
|
import com.qunzhixinxi.hnqz.common.ding.enums.DingEnum;
|
|
@@ -54,11 +57,9 @@ import javax.validation.Valid;
|
|
|
import java.io.BufferedOutputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.io.OutputStream;
|
|
|
-import java.nio.file.Files;
|
|
|
-import java.nio.file.Paths;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
import java.util.Collections;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
@@ -83,6 +84,7 @@ public class WmPayOffController {
|
|
|
private final WmPayOffService wmPayOffService;
|
|
|
private final WmScorePackageService wmScorePackageService;
|
|
|
private final WmScorePackageSettleNoteService wmScorePackageSettleNoteService;
|
|
|
+ private final SysDeptSubService sysDeptSubService;
|
|
|
private final RedisTemplate<String, Object> redisTemplate;
|
|
|
private final SysDictItemService dictItemService;
|
|
|
|
|
@@ -402,21 +404,73 @@ public class WmPayOffController {
|
|
|
@SysLog("导出结算单")
|
|
|
@GetMapping("/exportSettlementProof")
|
|
|
public void exportSettlementProof(@RequestParam("packageIds") List<String> packageIds, HttpServletResponse response) {
|
|
|
+ log.info("导出结算单参数packageIds={}", packageIds);
|
|
|
+
|
|
|
+ // 查询积分包
|
|
|
List<WmScorePackage> scorePackageList = wmScorePackageService.listByIds(packageIds);
|
|
|
+ // 查询结算信息
|
|
|
List<WmScorePackageSettleNote> settleNoteList =
|
|
|
wmScorePackageSettleNoteService.list(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
|
|
|
- .eq(WmScorePackageSettleNote::getPackageId, packageIds));
|
|
|
-
|
|
|
- // 导出模板渲染
|
|
|
- // 拼装数据
|
|
|
- SettlementProofModel.PackageDetail packageDetail = new SettlementProofModel.PackageDetail();
|
|
|
- packageDetail.setScorePackageName("111");
|
|
|
- packageDetail.setSubjectLocation("12312");
|
|
|
- packageDetail.setActualAmount("11");
|
|
|
- packageDetail.setSettleAmount("123");
|
|
|
- packageDetail.setNumber("1");
|
|
|
+ .in(WmScorePackageSettleNote::getPackageId, packageIds));
|
|
|
+ if (CollUtil.isEmpty(settleNoteList)) {
|
|
|
+ throw new RuntimeException("结算信息为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, List<WmScorePackageSettleNote>> settleNoteMap = settleNoteList.stream()
|
|
|
+ .collect(Collectors.groupingBy(WmScorePackageSettleNote::getPackageId));
|
|
|
+
|
|
|
+ SubjectLocation subjectLocation = settleNoteList.get(0).getSubjectLocation();
|
|
|
+ if (subjectLocation == null) {
|
|
|
+ throw new RuntimeException("结算渠道为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询企业对应渠道的收款单位信息
|
|
|
+ SysDeptSub queryDeptSub = sysDeptSubService.getOne(Wrappers.<SysDeptSub>lambdaQuery()
|
|
|
+ .eq(SysDeptSub::getDeptId, SecurityUtils.getUser().getDeptId())
|
|
|
+ .eq(SysDeptSub::getSubjectLocation, subjectLocation)
|
|
|
+ .eq(SysDeptSub::getEnableFlag, SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode()));
|
|
|
+ if (queryDeptSub == null) {
|
|
|
+ throw new RuntimeException("结算渠道配置为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 导出数据整合
|
|
|
+ // 积分包列表
|
|
|
+ List<SettlementProofModel.PackageDetail> packageDetailList = new ArrayList<>();
|
|
|
+ // 申请金额小计
|
|
|
+ BigDecimal totalSettleAmount = BigDecimal.ZERO;
|
|
|
+ for (int i = 0; i < scorePackageList.size(); i++) {
|
|
|
+ WmScorePackage scorePackage = scorePackageList.get(i);
|
|
|
+ SettlementProofModel.PackageDetail packageDetail = new SettlementProofModel.PackageDetail();
|
|
|
+ packageDetail.setNumber(String.valueOf(i + 1));
|
|
|
+ packageDetail.setScorePackageName(scorePackage.getScorePackageName());
|
|
|
+ // 结算信息
|
|
|
+ List<WmScorePackageSettleNote> settleNotes = settleNoteMap.get(scorePackage.getId());
|
|
|
+ // 实际到账金额
|
|
|
+ BigDecimal settleAmount = settleNotes.stream()
|
|
|
+ .map(WmScorePackageSettleNote::getSettleAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ // 实际结算金额
|
|
|
+ BigDecimal actualAmount = settleNotes.stream()
|
|
|
+ .map(WmScorePackageSettleNote::getActualAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ totalSettleAmount = totalSettleAmount.add(settleAmount);
|
|
|
+ packageDetail.setSubjectLocation(subjectLocation.getDescription());
|
|
|
+ packageDetail.setSettleAmount(String.valueOf(settleAmount));
|
|
|
+ packageDetail.setActualAmount(String.valueOf(actualAmount));
|
|
|
+ packageDetailList.add(packageDetail);
|
|
|
+ }
|
|
|
SettlementProofModel settlementProofModel = new SettlementProofModel();
|
|
|
- settlementProofModel.setPackageList(Collections.singletonList(packageDetail));
|
|
|
+ settlementProofModel.setPackageList(packageDetailList);
|
|
|
+
|
|
|
+ // 收款单位户名
|
|
|
+ String collectionName = "";
|
|
|
+ // 收款单位账号
|
|
|
+ String collectionAccount = "";
|
|
|
+ // 收款单位开户行
|
|
|
+ String collectionBankName = "";
|
|
|
+ if (queryDeptSub.getSettlementProofInfo() != null) {
|
|
|
+ collectionName = queryDeptSub.getSettlementProofInfo().getOrDefault("collection_name", "");
|
|
|
+ collectionAccount = queryDeptSub.getSettlementProofInfo().getOrDefault("collection_account", "");
|
|
|
+ collectionBankName = queryDeptSub.getSettlementProofInfo().getOrDefault("collection_bank_name", "");
|
|
|
+ }
|
|
|
|
|
|
// 服务器模板文件路径
|
|
|
String resourcePath = OsEnvUtils.getEachEnvPaths().get("EXCEL_FILE_PATH") + "settlement_application_form_template.docx";
|
|
@@ -425,26 +479,32 @@ public class WmPayOffController {
|
|
|
|
|
|
Configure config = Configure.newBuilder().bind("package_list", policy).build();
|
|
|
|
|
|
+ String finalCollectionName = collectionName;
|
|
|
+ String finalCollectionAccount = collectionAccount;
|
|
|
+ String finalCollectionBankName = collectionBankName;
|
|
|
+ BigDecimal finalTotalSettleAmount = totalSettleAmount;
|
|
|
XWPFTemplate template = XWPFTemplate.compile(resourcePath, config).render(
|
|
|
new HashMap<String, Object>() {{
|
|
|
+ // 积分包列表
|
|
|
put("package_list", settlementProofModel.getPackageList());
|
|
|
- put("total_settle_amount", "111");
|
|
|
- put("total_settle_amount_cn", "222");
|
|
|
- put("collection_name", "222");
|
|
|
- put("collection_account", "333");
|
|
|
- put("collection_bank_name", "444");
|
|
|
+ // 实际到账金额
|
|
|
+ put("total_settle_amount", String.valueOf(finalTotalSettleAmount));
|
|
|
+ // 实际结算金额
|
|
|
+ put("total_settle_amount_cn", AmountToCNUtil.number2CNMontrayUnit(finalTotalSettleAmount));
|
|
|
+ put("collection_name", finalCollectionName);
|
|
|
+ put("collection_account", finalCollectionAccount);
|
|
|
+ put("collection_bank_name", finalCollectionBankName);
|
|
|
}}
|
|
|
);
|
|
|
|
|
|
try {
|
|
|
-
|
|
|
//清空response
|
|
|
response.reset();
|
|
|
//设置response的Header
|
|
|
response.addHeader("Content-Disposition",
|
|
|
- String.format("attachment;filename=请款申请单(%s)-%s.docx", 123123, DateUtil.format(LocalDateTime.now(),
|
|
|
+ String.format("attachment;filename=请款申请单(%s)-%s.docx", String.join(",", packageIds), DateUtil.format(LocalDateTime.now(),
|
|
|
DatePattern.PURE_DATETIME_PATTERN)));
|
|
|
- response.setContentType("application/msword");
|
|
|
+ response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
|
|
|
OutputStream os = new BufferedOutputStream(response.getOutputStream());
|
|
|
|
|
|
template.write(os);
|