فهرست منبع

feat: 企业当日结算数据发送邮件通知1

lixuesong 1 سال پیش
والد
کامیت
be82d8367c

+ 2 - 0
db/v2.0/20240223.sql

@@ -0,0 +1,2 @@
+alter table sys_dept
+    add emails varchar(1024) null comment '邮箱(多个逗号分隔)';

+ 39 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/feign/RemoteScorePackageService.java

@@ -0,0 +1,39 @@
+package com.qunzhixinxi.hnqz.admin.api.feign;
+
+import com.qunzhixinxi.hnqz.admin.api.model.WmScorePackageSettleExcelModel;
+import com.qunzhixinxi.hnqz.common.core.constant.SecurityConstants;
+import com.qunzhixinxi.hnqz.common.core.constant.ServiceNameConstants;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestHeader;
+
+import java.util.List;
+
+/**
+ * 积分包feign服务
+ *
+ * @author lixuesong
+ * @date 2024/02/23
+ */
+@FeignClient(contextId = "remoteScorePackageService", value = ServiceNameConstants.UPMS_SERVICE)
+public interface RemoteScorePackageService {
+
+	/**
+	 * 结算包结算导出-内部
+	 *
+	 * @param deptId 企业id
+	 * @return excel模型
+	 */
+	@GetMapping("/settle/exportPackageSettleForInner/{deptId}")
+	List<WmScorePackageSettleExcelModel> exportPackageSettle(@PathVariable("deptId") Integer deptId, @RequestHeader(SecurityConstants.FROM) String from);
+
+	/**
+	 * MAH结算包结算导出-内部
+	 *
+	 * @param deptId 企业id
+	 * @return excel模型
+	 */
+	@GetMapping("/settle/exportPackageSettleByMAHForInner/{deptId}")
+	List<WmScorePackageSettleExcelModel> exportPackageSettleByMAH(@PathVariable("deptId") Integer deptId, @RequestHeader(SecurityConstants.FROM) String from);
+}

+ 1 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/excel/WmScorePackageSettleExcelModel.java → hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/model/WmScorePackageSettleExcelModel.java

@@ -1,4 +1,4 @@
-package com.qunzhixinxi.hnqz.admin.entity.model.excel;
+package com.qunzhixinxi.hnqz.admin.api.model;
 
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;

+ 2 - 1
hnqz-upms/hnqz-upms-api/src/main/resources/META-INF/spring.factories

@@ -5,4 +5,5 @@ com.qunzhixinxi.hnqz.common.feign.HnqzFeignAutoConfiguration=\
   com.qunzhixinxi.hnqz.admin.api.feign.RemoteParamService,\
   com.qunzhixinxi.hnqz.admin.api.feign.RemoteTenantService,\
   com.qunzhixinxi.hnqz.admin.api.feign.RemoteTokenService,\
-  com.qunzhixinxi.hnqz.admin.api.feign.RemoteUserService
+  com.qunzhixinxi.hnqz.admin.api.feign.RemoteUserService,\
+  com.qunzhixinxi.hnqz.admin.api.feign.RemoteScorePackageService

+ 37 - 99
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmPayOffController.java

@@ -16,7 +16,6 @@ import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
 import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
-import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
@@ -24,13 +23,11 @@ import com.qunzhixinxi.hnqz.admin.entity.dto.NotifyByOneSelfDTO;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
 import com.qunzhixinxi.hnqz.admin.entity.model.excel.SettlementProofModel;
-import com.qunzhixinxi.hnqz.admin.entity.model.excel.WmScorePackageSettleExcelModel;
+import com.qunzhixinxi.hnqz.admin.api.model.WmScorePackageSettleExcelModel;
 import com.qunzhixinxi.hnqz.admin.entity.vo.SettleFinancialReviewSettleDetailVO;
 import com.qunzhixinxi.hnqz.admin.entity.vo.SettleFinancialReviewVO;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.DeptPermissionEnum;
-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.mapper.WmScorePackageMapper;
@@ -46,6 +43,7 @@ import com.qunzhixinxi.hnqz.common.core.exception.BizException;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.ding.enums.DingEnum;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
+import com.qunzhixinxi.hnqz.common.security.annotation.Inner;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import lombok.AllArgsConstructor;
@@ -58,6 +56,7 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.script.DefaultRedisScript;
 import org.springframework.security.access.AccessDeniedException;
 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.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -425,56 +424,10 @@ public class WmPayOffController {
 	@SysLog("积分包结算导出")
 	@GetMapping("/exportPackageSettle")
 	public List<WmScorePackageSettleExcelModel> exportPackageSettle(WmScorePackageSettleInput input) {
-		input.setSendPackageDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
-		input.setPackageFinishStatus("1");
-		input.setTypeid("4");
-		input.setSettleFlag("1");
-		List<WmScorePackageSettleOutput> list = wmScorePackageService.listAllPackageSettle(input);
-		List<WmScorePackageSettleExcelModel> exportList = new ArrayList<>();
-		if (CollectionUtil.isEmpty(list)) {
-			return Collections.emptyList();
-		}
 
-		// 获取所有税源地的发票类目信息
-		List<SysDictItem> invoiceCategoryList =
-				dictItemService.list(Wrappers.<SysDictItem>lambdaQuery()
-						.in(SysDictItem::getType, SubjectLocation.getAllInvoices()));
-		Map<String, Map<String, String>> collect = invoiceCategoryList.stream().collect(Collectors.groupingBy(SysDictItem::getType, Collectors.toMap(SysDictItem::getValue, SysDictItem::getLabel)));
-
-		// 转换为导出实体
-		for (int i = 0; i < list.size(); i++) {
-			WmScorePackageSettleOutput settleOutput = list.get(i);
-			WmScorePackageSettleExcelModel export = new WmScorePackageSettleExcelModel();
-			export.setNumber(i + 1);
-			export.setPackageSn(settleOutput.getPackageSn());
-			export.setScorePackageName(settleOutput.getScorePackageName());
-			export.setPackageType1(PackageTypeEnum.type1Resolve(settleOutput.getPackageType1()).getName2());
-			export.setPackageEntName(settleOutput.getPackageEntName());
-			export.setCreateTime(settleOutput.getCreateTime());
-			export.setPackageFinishStatus(PackageFinishStatusEnum.resolve(settleOutput.getPackageFinishStatus()).getName());
-			export.setScore(settleOutput.getScore());
-
-			SubjectLocation subjectLocation = settleOutput.getSubjectLocation();
-			if (subjectLocation != null) {
-				export.setSubType(subjectLocation.getDescription());
-				// 获取当前税源地的发票类目
-				Map<String, String> subInvoice = collect.get(subjectLocation.getInvoiceType());
-				if (subInvoice != null) {
-					// 根据发票类目value获取发票类目名称
-					String cate = String.valueOf(settleOutput.getInvoiceCategory());
-					String invoice = subInvoice.getOrDefault(cate, "");
-					export.setInvoiceCategory(invoice);
-				}
-			}
-			export.setUserNames(settleOutput.getUserNames());
-			export.setSettleAmount(settleOutput.getSettleAmount());
-			export.setActualAmount(settleOutput.getActualAmount());
-			export.setSettleStatus(SettleStatusEnum.resolve(settleOutput.getSettleStatus()).getName());
-			export.setBelongDate(settleOutput.getBelongDate());
-			exportList.add(export);
-		}
+		input.setSendPackageDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
 
-		return exportList;
+		return wmPayOffService.exportPackageSettle(input);
 	}
 
 	/**
@@ -489,55 +442,40 @@ public class WmPayOffController {
 	public List<WmScorePackageSettleExcelModel> exportPackageSettleByMAH(WmScorePackageSettleInput input) {
 
 		input.setMahSettleDeptId(SecurityUtils.getUser().getDeptId());
-		input.setPackageFinishStatus("1");
-		input.setTypeid("4");
-		input.setSettleFlag("1");
-		List<WmScorePackageSettleOutput> list = wmScorePackageService.listPackageSettleList(new Page<>(1, 499), input).getRecords();
-		List<WmScorePackageSettleExcelModel> exportList = new ArrayList<>();
-		if (CollectionUtil.isEmpty(list)) {
-			return Collections.emptyList();
-		}
 
-		// 获取所有税源地的发票类目信息
-		List<SysDictItem> invoiceCategoryList =
-				dictItemService.list(Wrappers.<SysDictItem>lambdaQuery()
-						.in(SysDictItem::getType, SubjectLocation.getAllInvoices()));
-		Map<String, Map<String, String>> collect = invoiceCategoryList.stream().collect(Collectors.groupingBy(SysDictItem::getType, Collectors.toMap(SysDictItem::getValue, SysDictItem::getLabel)));
-
-		// 转换为导出实体
-		for (int i = 0; i < list.size(); i++) {
-			WmScorePackageSettleOutput settleOutput = list.get(i);
-			WmScorePackageSettleExcelModel export = new WmScorePackageSettleExcelModel();
-			export.setNumber(i + 1);
-			export.setPackageSn(settleOutput.getPackageSn());
-			export.setScorePackageName(settleOutput.getScorePackageName());
-			export.setPackageType1(PackageTypeEnum.type1Resolve(settleOutput.getPackageType1()).getName2());
-			export.setPackageEntName(settleOutput.getPackageEntName());
-			export.setCreateTime(settleOutput.getCreateTime());
-			export.setPackageFinishStatus(PackageFinishStatusEnum.resolve(settleOutput.getPackageFinishStatus()).getName());
-			export.setScore(settleOutput.getScore());
-
-			SubjectLocation subjectLocation = settleOutput.getSubjectLocation();
-			if (subjectLocation != null) {
-				export.setSubType(subjectLocation.getDescription());
-				// 获取当前税源地的发票类目
-				Map<String, String> subInvoice = collect.get(subjectLocation.getInvoiceType());
-				if (subInvoice != null) {
-					// 根据发票类目value获取发票类目名称
-					String cate = String.valueOf(settleOutput.getInvoiceCategory());
-					String invoice = subInvoice.getOrDefault(cate, "");
-					export.setInvoiceCategory(invoice);
-				}
-			}
-			export.setUserNames(settleOutput.getUserNames());
-			export.setSettleAmount(settleOutput.getSettleAmount());
-			export.setActualAmount(settleOutput.getActualAmount());
-			export.setSettleStatus(SettleStatusEnum.resolve(settleOutput.getSettleStatus()).getName());
-			export.setBelongDate(settleOutput.getBelongDate());
-			exportList.add(export);
-		}
+		return wmPayOffService.exportPackageSettleByMAH(input);
+	}
+
+	/**
+	 * 结算包结算导出-内部
+	 *
+	 * @param deptId 企业id
+	 * @return excel模型
+	 */
+	@Inner
+	@SysLog("积分包结算导出-内部")
+	@GetMapping("/exportPackageSettleForInner/{deptId}")
+	public List<WmScorePackageSettleExcelModel> exportPackageSettle(@PathVariable("deptId") Integer deptId) {
+		WmScorePackageSettleInput input = new WmScorePackageSettleInput();
+		input.setSendPackageDeptId(String.valueOf(deptId));
+
+		// TODO 添加查询条件 查指定日期
+		return wmPayOffService.exportPackageSettle(input);
+	}
+
+	/**
+	 * MAH结算包结算导出-内部
+	 *
+	 * @param deptId 企业id
+	 * @return excel模型
+	 */
+	@SysLog("积分包结算导出")
+	@GetMapping("/exportPackageSettleByMAHForInner/{deptId}")
+	public List<WmScorePackageSettleExcelModel> exportPackageSettleByMAH(@PathVariable("deptId") Integer deptId) {
+		WmScorePackageSettleInput input = new WmScorePackageSettleInput();
+		input.setMahSettleDeptId(deptId);
 
-		return exportList;
+		return wmPayOffService.exportPackageSettleByMAH(input);
 	}
 
 	/**

+ 17 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmPayOffService.java

@@ -3,8 +3,8 @@ package com.qunzhixinxi.hnqz.admin.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qunzhixinxi.hnqz.admin.entity.WmPayOff;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
-import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
+import com.qunzhixinxi.hnqz.admin.api.model.WmScorePackageSettleExcelModel;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 
 import java.util.List;
@@ -110,4 +110,20 @@ public interface WmPayOffService extends IService<WmPayOff> {
 	 * @return {@link R}<{@link ?}>
 	 */
 	R<?> financialSettle(WmScorePackageSettleInput input);
+
+	/**
+	 * 结算包结算导出
+	 *
+	 * @param input 输入参数
+	 * @return excel模型
+	 */
+	List<WmScorePackageSettleExcelModel> exportPackageSettle(WmScorePackageSettleInput input);
+
+	/**
+	 * 结算包结算导出
+	 *
+	 * @param input 输入参数
+	 * @return excel模型
+	 */
+	List<WmScorePackageSettleExcelModel> exportPackageSettleByMAH(WmScorePackageSettleInput input);
 }

+ 97 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPayOffServiceImpl.java

@@ -1,11 +1,13 @@
 package com.qunzhixinxi.hnqz.admin.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsState;
@@ -18,6 +20,9 @@ import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
 import com.qunzhixinxi.hnqz.admin.entity.*;
 import com.qunzhixinxi.hnqz.admin.entity.input.SettleNoteStatusOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
+import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
+import com.qunzhixinxi.hnqz.admin.api.model.WmScorePackageSettleExcelModel;
+import com.qunzhixinxi.hnqz.admin.enums.PackageFinishStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SettleStatusEnum;
@@ -66,7 +71,6 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * 结算表
@@ -2850,4 +2854,96 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 		this.save(wmPayOff);
 	}
 
+	/**
+	 * 结算包结算导出
+	 *
+	 * @param input 输入参数
+	 * @return excel模型
+	 */
+	@Override
+	public List<WmScorePackageSettleExcelModel> exportPackageSettle(WmScorePackageSettleInput input) {
+		input.setPackageFinishStatus("1");
+		input.setTypeid("4");
+		input.setSettleFlag("1");
+		List<WmScorePackageSettleOutput> list = wmScorePackageService.listAllPackageSettle(input);
+		List<WmScorePackageSettleExcelModel> exportList = new ArrayList<>();
+		if (CollectionUtil.isEmpty(list)) {
+			return Collections.emptyList();
+		}
+
+		// 结算数据转换为excel model
+		this.convertToPackageSettleExcelModel(list, exportList);
+
+		return exportList;
+	}
+
+	/**
+	 * 结算包结算导出
+	 *
+	 * @param input 输入参数
+	 * @return excel模型
+	 */
+	@Override
+	public List<WmScorePackageSettleExcelModel> exportPackageSettleByMAH(WmScorePackageSettleInput input) {
+		input.setPackageFinishStatus("1");
+		input.setTypeid("4");
+		input.setSettleFlag("1");
+		List<WmScorePackageSettleOutput> list = wmScorePackageService.listPackageSettleList(new Page<>(1, 499), input).getRecords();
+		List<WmScorePackageSettleExcelModel> exportList = new ArrayList<>();
+		if (CollectionUtil.isEmpty(list)) {
+			return Collections.emptyList();
+		}
+
+		// 结算数据转换为excel model
+		this.convertToPackageSettleExcelModel(list, exportList);
+
+		return exportList;
+	}
+
+	/**
+	 * 结算数据转换为excel model
+	 *
+	 * @param list
+	 * @param exportList
+	 */
+	private void convertToPackageSettleExcelModel(List<WmScorePackageSettleOutput> list, List<WmScorePackageSettleExcelModel> exportList) {
+		// 获取所有税源地的发票类目信息
+		List<SysDictItem> invoiceCategoryList =
+				sysDictItemMapper.selectList(Wrappers.<SysDictItem>lambdaQuery()
+						.in(SysDictItem::getType, SubjectLocation.getAllInvoices()));
+		Map<String, Map<String, String>> collect = invoiceCategoryList.stream().collect(Collectors.groupingBy(SysDictItem::getType, Collectors.toMap(SysDictItem::getValue, SysDictItem::getLabel)));
+
+		// 转换为导出实体
+		for (int i = 0; i < list.size(); i++) {
+			WmScorePackageSettleOutput settleOutput = list.get(i);
+			WmScorePackageSettleExcelModel export = new WmScorePackageSettleExcelModel();
+			export.setNumber(i + 1);
+			export.setPackageSn(settleOutput.getPackageSn());
+			export.setScorePackageName(settleOutput.getScorePackageName());
+			export.setPackageType1(PackageTypeEnum.type1Resolve(settleOutput.getPackageType1()).getName2());
+			export.setPackageEntName(settleOutput.getPackageEntName());
+			export.setCreateTime(settleOutput.getCreateTime());
+			export.setPackageFinishStatus(PackageFinishStatusEnum.resolve(settleOutput.getPackageFinishStatus()).getName());
+			export.setScore(settleOutput.getScore());
+
+			SubjectLocation subjectLocation = settleOutput.getSubjectLocation();
+			if (subjectLocation != null) {
+				export.setSubType(subjectLocation.getDescription());
+				// 获取当前税源地的发票类目
+				Map<String, String> subInvoice = collect.get(subjectLocation.getInvoiceType());
+				if (subInvoice != null) {
+					// 根据发票类目value获取发票类目名称
+					String cate = String.valueOf(settleOutput.getInvoiceCategory());
+					String invoice = subInvoice.getOrDefault(cate, "");
+					export.setInvoiceCategory(invoice);
+				}
+			}
+			export.setUserNames(settleOutput.getUserNames());
+			export.setSettleAmount(settleOutput.getSettleAmount());
+			export.setActualAmount(settleOutput.getActualAmount());
+			export.setSettleStatus(SettleStatusEnum.resolve(settleOutput.getSettleStatus()).getName());
+			export.setBelongDate(settleOutput.getBelongDate());
+			exportList.add(export);
+		}
+	}
 }

+ 5 - 0
hnqz-visual/hnqz-daemon-quartz/pom.xml

@@ -25,6 +25,11 @@
 			<groupId>com.alibaba.cloud</groupId>
 			<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 		</dependency>
+		<!--upms api、model 模块-->
+		<dependency>
+			<groupId>com.qunzhixinxi</groupId>
+			<artifactId>hnqz-upms-api</artifactId>
+		</dependency>
 		<!--日志处理-->
 		<dependency>
 			<groupId>com.qunzhixinxi</groupId>

+ 32 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/config/LocalDateTimeConverter.java

@@ -0,0 +1,32 @@
+package com.qunzhixinxi.hnqz.daemon.quartz.config;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+public class LocalDateTimeConverter implements Converter<LocalDateTime> {
+    private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
+    @Override
+    public Class<LocalDateTime> supportJavaTypeKey() {
+        return LocalDateTime.class;
+    }
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+    @Override
+    public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
+										   GlobalConfiguration globalConfiguration) {
+        return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern(DEFAULT_PATTERN));
+    }
+    @Override
+    public CellData<String> convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty,
+                                               GlobalConfiguration globalConfiguration) {
+        return new CellData<>(value.format(DateTimeFormatter.ofPattern(DEFAULT_PATTERN)));
+    }
+}

+ 5 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/entity/SysDept.java

@@ -125,4 +125,9 @@ public class SysDept extends Model<SysDept> {
 	 * 人力家服务费费率(万分之)
 	 */
 	private Integer renlijiaServiceChargeRate;
+
+	/**
+	 * 邮箱
+	 */
+	private String[] emails;
 }

+ 111 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/task/SpringBeanTaskDemo.java

@@ -22,29 +22,39 @@ import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcelFactory;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.qunzhixinxi.hnqz.admin.api.feign.RemoteScorePackageService;
+import com.qunzhixinxi.hnqz.admin.api.model.WmScorePackageSettleExcelModel;
+import com.qunzhixinxi.hnqz.common.core.constant.SecurityConstants;
+import com.qunzhixinxi.hnqz.daemon.quartz.config.LocalDateTimeConverter;
 import com.qunzhixinxi.hnqz.daemon.quartz.constants.HnqzQuartzEnum;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleMemberSettleAmountOverrunInSeveralMonths;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleMemberSettleSameAmountInSeveralMonths;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleMemberWithoutSuchTaskTypesInSeveralMonths;
+import com.qunzhixinxi.hnqz.daemon.quartz.entity.SysDept;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmTask;
 import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SingleMemberSettleAmountOverrunInSeveralMonthsMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SingleMemberSettleSameAmountInSeveralMonthsMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SingleMemberWithoutSuchTaskTypesInSeveralMonthsMapper;
+import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SysDeptMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SysUserMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.service.*;
 import com.qunzhixinxi.hnqz.daemon.quartz.zhuqu.ZhuaquTest;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.io.ByteArrayResource;
 import org.springframework.mail.javamail.JavaMailSender;
 import org.springframework.mail.javamail.MimeMessageHelper;
 import org.springframework.stereotype.Component;
 
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
+import java.io.ByteArrayOutputStream;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -55,6 +65,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.TreeMap;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -80,6 +91,8 @@ public class SpringBeanTaskDemo {
 	private final SingleMemberSettleAmountOverrunInSeveralMonthsMapper singleMemberSettleAmountOverrunInSeveralMonthsMapper;
 	private final SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper;
 	private final SingleMemberWithoutSuchTaskTypesInSeveralMonthsMapper singleMemberWithoutSuchTaskTypesInSeveralMonthsMapper;
+	private final SysDeptMapper sysDeptMapper;
+	private final RemoteScorePackageService remoteScorePackageService;
 
 //	/**
 //	 * 测试Spring Bean的演示方法
@@ -437,4 +450,102 @@ public class SpringBeanTaskDemo {
 
 		return HnqzQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType();
 	}
+
+	/**
+	 * 每天发送当日结算数据给企业指定邮箱
+	 *
+	 * @param para 参数(格式为"2024-02-23,1611890565;1611890564")
+	 * @return {@link String}
+	 */
+	@SneakyThrows
+	public String sendCurrentDaySettleDataToDeptDaily(String para) {
+		// 校验参数
+		List<String> params = null;
+		if (StrUtil.isNotBlank(para)) {
+			if (!para.contains(StrUtil.COMMA)) {
+				log.error("参数错误");
+				return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
+			}
+
+			params = StrUtil.split(para, StrUtil.COMMA);
+			if (params.size() != 2) {
+				log.error("参数错误2");
+				return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
+			}
+		}
+
+		// 当前指定的日期
+		String currentDayStr = null;
+
+		LambdaQueryWrapper<SysDept> queryWrapper = Wrappers.lambdaQuery();
+		if (CollUtil.isNotEmpty(params)) {
+			// 指定的日期
+			currentDayStr = params.get(0);
+			// 指定的企业id
+			List<String> deptIds = StrUtil.split(params.get(1), ";");
+			queryWrapper.in(SysDept::getDeptId, deptIds);
+		} else {
+			// 默认取定期任务执行时的前一天日期
+			LocalDateTime currentDay = LocalDateTime.now().minusDays(1L);
+			currentDayStr = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(currentDay);
+		}
+		// 获取所有企业的信息
+		List<SysDept> depts = sysDeptMapper.selectList(queryWrapper);
+
+		String finalCurrentDayStr = currentDayStr;
+		depts.forEach(dept -> {
+			try {
+
+				// 本企业当日结算成功数据-发送邮件
+				MimeMessage mail = sender.createMimeMessage();
+				MimeMessageHelper helper = new MimeMessageHelper(mail, true);
+
+				helper.setFrom("yaoyi_report@yaoyi.net");
+				helper.setTo(dept.getEmails());
+
+				String title = "本企业结算成功数据(" + finalCurrentDayStr + ")";
+				helper.setSubject(title);
+
+				// 获取指定企业当日结算的数据
+				List<WmScorePackageSettleExcelModel> excelModels = remoteScorePackageService.exportPackageSettle(dept.getDeptId(), SecurityConstants.FROM_IN);
+				ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+				EasyExcelFactory.write(byteArrayOutputStream, WmScorePackageSettleExcelModel.class)
+						.registerConverter(new LocalDateTimeConverter())
+						.autoCloseStream(false).sheet("本企业结算成功数据")
+						.doWrite(excelModels);
+				helper.addAttachment(title, new ByteArrayResource(byteArrayOutputStream.toByteArray()));
+				helper.setText(String.format("当日结算成功%s条,详情数据见附件", excelModels.size()));
+
+				sender.send(mail);
+				log.info("{}本企业结算成功数据发送成功", dept.getDeptId());
+
+				// MAH当日结算成功数据-发送邮件
+				MimeMessage mail2 = sender.createMimeMessage();
+				MimeMessageHelper helper2 = new MimeMessageHelper(mail, true);
+
+				helper2.setFrom("yaoyi_report@yaoyi.net");
+				helper2.setTo(dept.getEmails());
+
+				String title2 = "MAH企业结算成功数据(" + finalCurrentDayStr + ")";
+				helper2.setSubject(title2);
+
+				// 获取指定企业当日结算的数据
+				List<WmScorePackageSettleExcelModel> excelModels2 = remoteScorePackageService.exportPackageSettleByMAH(dept.getDeptId(), SecurityConstants.FROM_IN);
+				ByteArrayOutputStream byteArrayOutputStream2 = new ByteArrayOutputStream();
+				EasyExcelFactory.write(byteArrayOutputStream2, WmScorePackageSettleExcelModel.class)
+						.registerConverter(new LocalDateTimeConverter())
+						.autoCloseStream(false).sheet("MAH企业结算成功数据")
+						.doWrite(excelModels2);
+				helper2.addAttachment(title2, new ByteArrayResource(byteArrayOutputStream2.toByteArray()));
+				helper2.setText(String.format("当日结算成功%s条,详情数据见附件", excelModels2.size()));
+
+				sender.send(mail2);
+				log.info("{}MAH企业结算成功数据发送成功", dept.getDeptId());
+			} catch (MessagingException ex) {
+				log.error("邮件发送失败", ex);
+			}
+		});
+
+		return HnqzQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType();
+	}
 }

+ 49 - 0
hnqz-visual/hnqz-daemon-quartz/src/test/java/RemoteScorePackageServiceTest.java

@@ -0,0 +1,49 @@
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import com.alibaba.excel.EasyExcelFactory;
+import com.qunzhixinxi.hnqz.admin.api.feign.RemoteScorePackageService;
+import com.qunzhixinxi.hnqz.admin.api.model.WmScorePackageSettleExcelModel;
+import com.qunzhixinxi.hnqz.common.core.constant.SecurityConstants;
+import com.qunzhixinxi.hnqz.daemon.quartz.HnqzDaemonQuartzApplication;
+import com.qunzhixinxi.hnqz.daemon.quartz.config.LocalDateTimeConverter;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.List;
+
+/**
+ * @author lixuesong
+ * @date 2024/02/23
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest(classes = HnqzDaemonQuartzApplication.class)
+public class RemoteScorePackageServiceTest {
+
+	@Autowired
+	private RemoteScorePackageService remoteScorePackageService;
+
+	@Test
+	public void exportPackageSettleTest() {
+		List<WmScorePackageSettleExcelModel> excelModels = remoteScorePackageService.exportPackageSettle(1611890565, SecurityConstants.FROM_IN);
+		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+		EasyExcelFactory.write(byteArrayOutputStream, WmScorePackageSettleExcelModel.class)
+				.registerConverter(new LocalDateTimeConverter())
+				.autoCloseStream(false).sheet("本企业结算成功数据")
+				.doWrite(excelModels);
+
+		File file = new File("D:\\li312\\Desktop\\tmp\\" + DateUtil.today() + ".xlsx");
+		try {
+			byteArrayOutputStream.writeTo(Files.newOutputStream(file.toPath()));
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		}
+	}
+}