weaver-hrm-salary/src/com/engine/salary/service/impl/LyPZServiceImpl.java

1080 lines
53 KiB
Java
Raw Normal View History

2024-08-28 17:42:16 +08:00
package com.engine.salary.service.impl;
import cn.hutool.core.bean.BeanUtil;
2024-08-30 17:44:26 +08:00
import com.cloudstore.eccom.pc.table.WeaTableColumn;
2024-08-28 17:42:16 +08:00
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
2024-09-04 16:15:01 +08:00
import com.engine.salary.entity.hrm.DeptInfo;
import com.engine.salary.entity.hrm.SubCompanyInfo;
2024-09-26 17:19:07 +08:00
import com.engine.salary.entity.ly.dto.LyFzhsBrowser;
import com.engine.salary.entity.ly.dto.LyFzhsInfo;
import com.engine.salary.entity.ly.dto.LyPzPreview;
import com.engine.salary.entity.ly.dto.LyVoucherDetailDTO;
2024-09-04 16:15:01 +08:00
import com.engine.salary.entity.ly.param.*;
import com.engine.salary.entity.ly.po.*;
2024-08-28 17:42:16 +08:00
import com.engine.salary.entity.salaryformula.ExpressFormula;
import com.engine.salary.entity.salaryformula.po.FormulaVar;
2024-09-04 16:15:01 +08:00
import com.engine.salary.enums.ly.LyFzhsTypeEnum;
2024-08-30 17:44:26 +08:00
import com.engine.salary.enums.ly.LyJDDirectionTypeEnum;
2024-08-28 17:42:16 +08:00
import com.engine.salary.enums.ly.LyPZTypeEnum;
import com.engine.salary.enums.salaryformula.ReferenceTypeEnum;
2024-09-04 16:15:01 +08:00
import com.engine.salary.exception.SalaryRunTimeException;
2024-08-28 17:42:16 +08:00
import com.engine.salary.formlua.entity.parameter.DataType;
import com.engine.salary.formlua.entity.standard.ExcelResult;
2024-09-04 16:15:01 +08:00
import com.engine.salary.mapper.ly.LyVoucherDetailMapper;
import com.engine.salary.mapper.ly.LyVoucherMapper;
2024-08-30 17:44:26 +08:00
import com.engine.salary.mapper.ly.UfKjkmMapper;
2024-09-04 16:15:01 +08:00
import com.engine.salary.service.*;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.db.IdGenerator;
2024-08-30 17:44:26 +08:00
import com.engine.salary.util.db.MapperProxyFactory;
2024-08-28 17:42:16 +08:00
import com.engine.salary.util.page.PageInfo;
2024-09-04 16:15:01 +08:00
import com.engine.salary.util.page.SalaryPageUtil;
import com.google.common.collect.Lists;
2024-08-28 17:42:16 +08:00
import lombok.extern.slf4j.Slf4j;
2024-09-04 16:15:01 +08:00
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
2024-09-06 15:36:20 +08:00
import org.apache.commons.lang.StringUtils;
2024-08-28 17:42:16 +08:00
import org.apache.commons.lang3.math.NumberUtils;
2024-09-04 16:15:01 +08:00
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
2024-08-28 17:42:16 +08:00
import weaver.general.Util;
import weaver.hrm.User;
import java.math.BigDecimal;
2024-09-04 16:15:01 +08:00
import java.util.*;
import java.util.stream.Collectors;
2024-08-28 17:42:16 +08:00
/**
* @author Harryxzy
* @ClassName LyPZServiceImpl
* @date 2024/08/27 10:14
* @description
*/
@Slf4j
public class LyPZServiceImpl extends Service implements LyPZService {
private LySalaryReportService getLySalaryReportService(User user) {
return ServiceUtil.getService(LySalaryReportServiceImpl.class, user);
}
private LySocialReportService getLySocialReportService(User user) {
return ServiceUtil.getService(LySocialReportServiceImpl.class, user);
}
private FormulaRunService getFormulaRunService(User user) {
return ServiceUtil.getService(FormulaRunServiceImpl.class, user);
}
2024-09-04 16:15:01 +08:00
private LyVoucherMapper getLyVoucherMapper() {
return MapperProxyFactory.getProxy(LyVoucherMapper.class);
}
private LyVoucherDetailMapper getLyVoucherDetailMapper() {
return MapperProxyFactory.getProxy(LyVoucherDetailMapper.class);
}
2024-08-30 17:44:26 +08:00
private UfKjkmMapper getUfKjkmMapper() {
return MapperProxyFactory.getProxy(UfKjkmMapper.class);
}
2024-09-04 16:15:01 +08:00
private SalaryEmployeeService getSalaryEmployeeService(User user) {
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
}
2024-08-28 17:42:16 +08:00
2024-09-06 15:36:20 +08:00
private TaxAgentService getTaxAgentService(User user) {
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
}
2024-08-28 17:42:16 +08:00
@Override
2024-08-30 17:44:26 +08:00
public Map<String, Object> genPZ(LyPZGenParam queryParam) {
2024-09-04 16:15:01 +08:00
// 获取报表结果,并将其每一列都转换为变量
List<Long> reportDataIds = new ArrayList<>();
List<List<FormulaVar>> formulaVarsList = getLyReportFormulaVar(queryParam, reportDataIds);
// 校验这些数据是否已经生成过了凭证
verifyCanGen(queryParam, reportDataIds);
// 获取当前凭证对应的所有会计科目信息
List<UfKjkmPO> ufKjkmList = genKjkmList(queryParam.getPzlx());
Map<String, Map<String, Object>> pzDetailValueMap = new LinkedHashMap<>();
Map<String, Object> totalKjkmValueMap = new HashMap<String, Object>();
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
String yFlag = baseBean.getPropValue("lySalaryNCVoucher", "sfddpzfl_y_flag");
String dkgrsdsBm = baseBean.getPropValue("lySalaryNCVoucher", "kjkm_dkkrsds_bm");
// 获取所有的部门信息
List<DeptInfo> deptInfos = getSalaryEmployeeService(user).listAllDeptInfoList();
// key:分部id-部门名称, value:部门id
Map<String, DeptInfo> depInfoMap = SalaryEntityUtil.convert2Map(deptInfos, dep -> dep.getSubcompanyid1() + "-" + dep.getName());
Set<Long> subCompanyIds = new HashSet<>();
for(List<FormulaVar> varList : formulaVarsList) {
String subcompanyId = "";
// 获取他们的职能项目类型,如果是项目则单独统计,如果是职能获取他部门上“是否单独凭证分录”的属性
boolean singleCount = false;
Map<String, String> varMap = SalaryEntityUtil.convert2Map(varList, FormulaVar::getFieldId, FormulaVar::getContent);
subcompanyId = varMap.get("subcompanyId");
String znxmlxContent = varMap.get("职能项目类型");
if (StringUtils.isBlank(znxmlxContent)) {
singleCount = true;
} else {
2024-09-06 15:36:20 +08:00
if (znxmlxContent.equals("项目/案场")) {
2024-09-04 16:15:01 +08:00
singleCount = true;
} else if (znxmlxContent.equals("职能")) {
// 获取部门信息
DeptInfo dept = depInfoMap.get(subcompanyId + "-" + varMap.getOrDefault("职能项目名称", ""));
// 获取部门属性信息
if (dept == null) {
singleCount = true;
} else {
rs.execute("SELECT sfddpzfl FROM hrmdepartmentdefined where deptid=" + dept.getId());
if (rs.next()) {
if (rs.getInt("sfddpzfl") == new Integer(yFlag)) {
singleCount = true;
}
}
}
} else {
singleCount = true;
}
}
String key = "";
if (singleCount == false && znxmlxContent.equals("职能")) {
// 所有职能合并算
key = "职能";
} else {
key = varMap.get("职能项目名称");
}
Map<String, Object> kjkmValueMap = pzDetailValueMap.computeIfAbsent(key + "_split" + znxmlxContent + "_split" + subcompanyId, k -> new HashMap<String, Object>());
// 每一条记录都需要执行一遍公式并把结果相加
for (UfKjkmPO kjkm : ufKjkmList) {
// 给公式中的变量填入值
ExcelResult result = new ExcelResult();
try {
result = getFormulaRunService(user).run(kjkm.getKjkmSalaryItemFormula(), varList, null);
} catch (Exception e) {
log.error("express execute fail ", e);
result.setStatus(false);
result.setErrorMsg(e.getMessage());
}
//核算出错,给个默认值
if (!result.isStatus() || result.getData() == null) {
log.error("express execute fail status ", result.getErrorMsg());
result.setData("0");
}
String resultStr = result.getData() == null ? "0" : result.getData().toString();
BigDecimal resultBigDecimal = NumberUtils.isCreatable(resultStr) ? new BigDecimal(resultStr) : BigDecimal.ZERO;
if (kjkm.getSfhbtj() != null && kjkm.getSfhbtj().equals(NumberUtils.INTEGER_ONE)) {
// 需要合并计算的会计科目
totalKjkmValueMap.put(kjkm.getKmbm(), ((BigDecimal)totalKjkmValueMap.getOrDefault(kjkm.getKmbm(), new BigDecimal(0))).add(resultBigDecimal));
totalKjkmValueMap.put("subCompanyId", subcompanyId);
subCompanyIds.add(NumberUtils.isCreatable(subcompanyId) ? Long.valueOf(subcompanyId) : 0);
} else {
if (kjkm.getKmbm().equals(dkgrsdsBm) && queryParam.getPzlx().equals(LyPZTypeEnum.XZFFPZ.getValue())) {
kjkmValueMap.put(kjkm.getKmbm() + kjkm.getXzxm(), ((BigDecimal)kjkmValueMap.getOrDefault(kjkm.getKmbm() + kjkm.getXzxm(), new BigDecimal(0))).add(resultBigDecimal));
kjkmValueMap.put("subCompanyId", subcompanyId);
subCompanyIds.add(NumberUtils.isCreatable(subcompanyId) ? Long.valueOf(subcompanyId) : 0);
} else {
kjkmValueMap.put(kjkm.getKmbm(), ((BigDecimal)kjkmValueMap.getOrDefault(kjkm.getKmbm(), new BigDecimal(0))).add(resultBigDecimal));
kjkmValueMap.put("subCompanyId", subcompanyId);
subCompanyIds.add(NumberUtils.isCreatable(subcompanyId) ? Long.valueOf(subcompanyId) : 0);
}
}
}
}
if (MapUtils.isNotEmpty(totalKjkmValueMap)) {
pzDetailValueMap.put("totalKjkm",totalKjkmValueMap);
}
// 封装会计科目的摘要信息、会计科目信息、借贷金额薪资,过滤金额为0的会计科目
List<LyPzPreview> lyPzPreviewList = new ArrayList<>();
Map<String, String> kmbmInfoMap = new HashMap<>();
List<UfKjkmPO> allKjkm = getUfKjkmMapper().listAll();
allKjkm.forEach(po -> kmbmInfoMap.put(po.getKmbm(), po.getKmmc()));
// 获取所有分部的辅助核算信息
List<LyFzhsInfo> fzhsList = getSalaryEmployeeService(user).listAllFzhsInfo();
Map<Long, LyFzhsInfo> lyFzhsInfoMap = SalaryEntityUtil.convert2Map(fzhsList, LyFzhsInfo::getSubCompanyId);
List<SubCompanyInfo> subCompanyInfoList = getSalaryEmployeeService(user).getSubCompanyInfoList(subCompanyIds.stream().collect(Collectors.toList()));
Map<Long, String> subCompanyMap = SalaryEntityUtil.convert2Map(subCompanyInfoList, SubCompanyInfo::getId, SubCompanyInfo::getName);
// 获取辅助核算列表信息
List<String> fzhsBmList = new ArrayList<>();
fzhsList.stream().forEach( info -> {
fzhsBmList.add(info.getFzhs());
fzhsBmList.add(info.getFzhsks());
fzhsBmList.add(info.getFzhssllb());
fzhsBmList.add(info.getFzhsfwlb());
});
// 根据辅助核算编码获取辅助核算浏览框
Map<String, LyFzhsBrowser> fzhsBrowserMap = getFzhsBrowserByBm(fzhsBmList);
// 获取对应的薪资所属月和季度(季度为上一季度)
queryParam.setSalaryMonthDate(SalaryDateUtil.dateStrToLocalYearMonth(queryParam.getSalaryMonth()));
String chnYearMonth = SalaryDateUtil.getFormatCHNYearMonth(queryParam.getSalaryMonthDate());
String chnLastSeason = getLastSeason(queryParam.getSalaryMonthDate());
// 获取摘要根据科目名称生成的摘要科目
List<String> xzffSpecialZyKjkmbm = Arrays.stream(baseBean.getPropValue("lySalaryNCVoucher", "xzff_special_zy_kjkmbm").split(",")).collect(Collectors.toList());
List<String> sbffSpecialZyKjkmbm = Arrays.stream(baseBean.getPropValue("lySalaryNCVoucher", "sbff_special_zy_kjkmbm").split(",")).collect(Collectors.toList());
// 社保公积金计提母子公司往来款
String sbgjjJtMzkswlkbm = baseBean.getPropValue("lySalaryNCVoucher", "sbgjj_jt_mzkswlkbm");
for(Map.Entry<String, Map<String, Object>> entry : pzDetailValueMap.entrySet()) {
Map<String, Object> kjkmValueMap = entry.getValue();
Long subCompanyId = Long.valueOf(kjkmValueMap.get("subCompanyId").toString());
LyFzhsInfo lyFzhsInfo = lyFzhsInfoMap.get(subCompanyId);
for (UfKjkmPO kjkm : ufKjkmList) {
// 获取该会计科目对应的辅助核算
BigDecimal value = new BigDecimal(0);
if (kjkm.getKmbm().equals(dkgrsdsBm) && queryParam.getPzlx().equals(LyPZTypeEnum.XZFFPZ.getValue())) {
value = (BigDecimal) kjkmValueMap.get(kjkm.getKmbm()+kjkm.getXzxm());
} else {
value = (BigDecimal) kjkmValueMap.get(kjkm.getKmbm());
}
if (value != null && !value.equals(BigDecimal.ZERO)) {
LyPzPreview build = LyPzPreview.builder()
.zy(genZy(chnYearMonth, chnLastSeason, queryParam.getPzlx(), entry.getKey(), kjkm.getSfsjdkm(), subCompanyMap, kjkm, xzffSpecialZyKjkmbm, sbffSpecialZyKjkmbm, sbgjjJtMzkswlkbm))
.kjkm(getFullPathKjkm(kjkm.getKmbm(), kmbmInfoMap))
.jfValue(kjkm.getFx().equals(LyJDDirectionTypeEnum.DEBIT.getValue()) ? value.toString() : "0.00")
.dfValue(kjkm.getFx().equals(LyJDDirectionTypeEnum.CREDIT.getValue()) ? value.toString() : "0.00")
.fzhsXmqs(lyFzhsInfo != null && kjkm.isFzhsFlag() ? fzhsBrowserMap.get(lyFzhsInfo.getFzhs()) : null)
.fzhsFwlb(lyFzhsInfo != null && kjkm.isFzhsFwlbFlag() ? fzhsBrowserMap.get(lyFzhsInfo.getFzhsfwlb()) : null)
.fzhsSllb(lyFzhsInfo != null && kjkm.isFzhsSllbFlag() ? fzhsBrowserMap.get(lyFzhsInfo.getFzhssllb()) : null)
.fzhsKs(lyFzhsInfo != null && kjkm.isFzhsKsFlag() ? fzhsBrowserMap.get(lyFzhsInfo.getFzhsks()) : null)
.dataSource(reportDataIds)
.build();
lyPzPreviewList.add(build);
}
}
}
List<WeaTableColumn> columns = new ArrayList<>();
columns.add(new WeaTableColumn("100px", "摘要" , "zy"));
columns.add(new WeaTableColumn("100px", "会计科目" , "kjkm"));
columns.add(new WeaTableColumn("100px", "辅助核算-项目期数" , "fzhsXmqs"));
columns.add(new WeaTableColumn("100px", "辅助核算-房屋类别" , "fzhsFwlb"));
columns.add(new WeaTableColumn("100px", "辅助核算-税率类别" , "fzhsSllb"));
columns.add(new WeaTableColumn("100px", "辅助核算-客商" , "fzhsKs"));
columns.add(new WeaTableColumn("100px", "辅助核算" , "fzhsOther"));
columns.add(new WeaTableColumn("100px", "借方金额" , "jfValue"));
columns.add(new WeaTableColumn("100px", "贷方金额" , "dfValue"));
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("columns" , columns);
resultMap.put("data", lyPzPreviewList);
2024-09-06 09:12:38 +08:00
// 求合计值
BigDecimal jfTotal = new BigDecimal("0");
BigDecimal dfTotal = new BigDecimal("0");
for (LyPzPreview pzPreview : lyPzPreviewList) {
if (NumberUtils.isCreatable(pzPreview.getJfValue())) {
jfTotal = jfTotal.add(new BigDecimal(pzPreview.getJfValue()));
}
if (NumberUtils.isCreatable(pzPreview.getDfValue())) {
dfTotal = dfTotal.add(new BigDecimal(pzPreview.getDfValue()));
}
}
LyPzPreview sumPz = LyPzPreview.builder().zy("合计").jfValue(jfTotal.toPlainString()).dfValue(dfTotal.toPlainString()).build();
resultMap.put("totalData", sumPz);
2024-09-04 16:15:01 +08:00
return resultMap;
}
/**
* 根据凭证编码获取浏览框
* @param fzhsBmList
* @return
*/
private Map<String, LyFzhsBrowser> getFzhsBrowserByBm(List<String> fzhsBmList) {
if (CollectionUtils.isEmpty(fzhsBmList)) {
return Collections.emptyMap();
}
List<LyFzhsBrowser> lyFzhsBrowserList = new ArrayList<>();
RecordSet rs = new RecordSet();
List<List<String>> partition = Lists.partition(fzhsBmList, 500);
partition.forEach(part -> {
String bmIdStr = StringUtils.join(part, "','");
rs.execute("SELECT fzhslx,bh,mc FROM uf_ncfuhs where bh in ('" + bmIdStr + "')");
while (rs.next()) {
LyFzhsBrowser browser = new LyFzhsBrowser();
browser.setFzhslx(LyPZTypeEnum.getDefaultLabelByValue(rs.getInt("fzhslx")));
browser.setBh(rs.getString("bh"));
browser.setMc(rs.getString("mc"));
lyFzhsBrowserList.add(browser);
}
});
return SalaryEntityUtil.convert2Map(lyFzhsBrowserList, LyFzhsBrowser::getBh);
}
/**
* 校验这些数据是否已经生成过了凭证
*
* @param queryParam
* @param reportDataIds
*/
private void verifyCanGen(LyPZGenParam queryParam, List<Long> reportDataIds) {
Date salaryMonth = SalaryDateUtil.dateStrToLocalYearMonth(queryParam.getSalaryMonth());
// 根据薪资所属月和凭证类型查询凭证
2024-09-06 15:36:20 +08:00
List<LyVoucherPO> lyVoucherPOS = getLyVoucherMapper().listSome(LyVoucherPO.builder().salaryMonth(salaryMonth).pzlx(queryParam.getPzlx()).ffgsqc(queryParam.getFfgsqc()).build());
2024-09-04 16:15:01 +08:00
List<Long> dataIds = lyVoucherPOS.stream()
.map(po -> po.getDataSource().split(","))
.flatMap(Arrays::stream)
.filter(NumberUtils::isCreatable)
.map(Long::valueOf)
2024-09-06 15:36:20 +08:00
.distinct()
2024-09-04 16:15:01 +08:00
.collect(Collectors.toList());
Optional<Long> existVoucher = reportDataIds.stream().filter(dataIds::contains).findFirst();
if (existVoucher.isPresent()) {
throw new SalaryRunTimeException("该数据已生成过凭证,请联系管理员删除后再重新生成凭证");
}
}
@Override
public PageInfo<Map<String, Object>> fzhsBrowserList(LyFzhslxParam queryParam) {
RecordSet rs = new RecordSet();
BaseBean baseBean = new BaseBean();
String fzhslxFieldId = baseBean.getPropValue("lySalaryNCVoucher", "fzhslx_field_id");
2024-09-06 09:12:38 +08:00
if (queryParam.getFzhslx() == null ) {
rs.execute("select bh,mc,fzhslx,b.selectname from uf_NCfuhs a left join workflow_selectitem b on a. fzhslx= b.SELECTVALUE where b.FIELDID=" + fzhslxFieldId );
} else {
rs.execute("select bh,mc,fzhslx,b.selectname from uf_NCfuhs a left join workflow_selectitem b on a. fzhslx= b.SELECTVALUE where b.FIELDID=" + fzhslxFieldId + "and a.fzhslx = "+ queryParam.getFzhslx());
}
2024-09-04 16:15:01 +08:00
List<Map<String, Object>> resultList = new ArrayList<>();
while (rs.next()) {
if (StringUtils.isNotBlank(queryParam.getKey())
&& !rs.getString("mc").contains(queryParam.getKey())
&& !rs.getString("bh").contains(queryParam.getKey())) {
} else {
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("bh", rs.getString("bh"));
resultMap.put("mc", rs.getString("mc"));
resultMap.put("fzhslx", rs.getString("selectname"));
resultList.add(resultMap);
}
}
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), resultList);
}
/**
* 获取报表结果并将其每一列都转换为变量
*
* @param queryParam
* @return
*/
private List<List<FormulaVar>> getLyReportFormulaVar(LyPZGenParam queryParam, List<Long> reportDataIds) {
2024-08-28 17:42:16 +08:00
List<List<FormulaVar>> formulaVarsList = new ArrayList<>();
if (queryParam.getPzlx().equals(LyPZTypeEnum.XZFFPZ.getValue()) || queryParam.getPzlx().equals(LyPZTypeEnum.XZJTPZ.getValue())) {
// 是工资单凭证
2024-09-14 14:06:31 +08:00
Map<String, Object> resultMap = getLySalaryReportService(user).listSalaryReport(LySalaryReportQueryParam.builder().salaryMonth(queryParam.getSalaryMonth()).ffgsqc(Collections.singletonList(queryParam.getFfgsqc())).export(true).build());
2024-08-28 17:42:16 +08:00
List<LySalaryReportPO> dataList = ((PageInfo<LySalaryReportPO>)resultMap.get("data")).getList();
// 将每一个结果转换成map的格式并作为变量存储
for (LySalaryReportPO po : dataList) {
2024-09-04 16:15:01 +08:00
reportDataIds.add(po.getId());
2024-08-28 17:42:16 +08:00
Map<String, Object> dataMap = BeanUtil.beanToMap(po);
List<FormulaVar> formulaVars = new ArrayList<>();
for (Map.Entry<String,Object> entry : dataMap.entrySet()) {
FormulaVar build = FormulaVar.builder()
.fieldId(entry.getKey())
.content(Util.null2String(entry.getValue()))
2024-08-30 17:44:26 +08:00
.fieldType(DataType.NUMBER)
2024-08-28 17:42:16 +08:00
.build();
2024-08-30 17:44:26 +08:00
if(entry.getKey().equals("ffgsqc") || entry.getKey().equals("fycdgsqc") || entry.getKey().equals("znxmmc")) {
build.setFieldType(DataType.STRING);
}
2024-08-28 17:42:16 +08:00
formulaVars.add(build);
}
formulaVarsList.add(formulaVars);
}
} else {
// 是社保公积金凭证
2024-09-14 14:06:31 +08:00
Map<String, Object> resultMap = getLySocialReportService(user).listSIReport(LySalaryReportQueryParam.builder().salaryMonth(queryParam.getSalaryMonth()).ffgsqc(Collections.singletonList(queryParam.getFfgsqc())).export(true).build());
2024-08-28 17:42:16 +08:00
List<LySocialReportPO> dataList = ((PageInfo<LySocialReportPO>)resultMap.get("data")).getList();
// 将每一个结果转换成map的格式并作为变量存储
for (LySocialReportPO po : dataList) {
2024-09-04 16:15:01 +08:00
reportDataIds.add(po.getId());
2024-08-28 17:42:16 +08:00
Map<String, Object> dataMap = BeanUtil.beanToMap(po);
List<FormulaVar> formulaVars = new ArrayList<>();
for (Map.Entry<String,Object> entry : dataMap.entrySet()) {
FormulaVar build = FormulaVar.builder()
.fieldId(entry.getKey())
.content(Util.null2String(entry.getValue()))
2024-08-30 17:44:26 +08:00
.fieldType(DataType.NUMBER)
2024-08-28 17:42:16 +08:00
.build();
2024-08-30 17:44:26 +08:00
if(entry.getKey().equals("ffgsqc") || entry.getKey().equals("fycdgsqc") || entry.getKey().equals("znxmmc")) {
build.setFieldType(DataType.STRING);
}
2024-08-28 17:42:16 +08:00
formulaVars.add(build);
}
formulaVarsList.add(formulaVars);
}
}
2024-09-04 16:15:01 +08:00
return formulaVarsList;
}
2024-08-28 17:42:16 +08:00
2024-09-04 16:15:01 +08:00
/**
* 获取会计科目信息
*
* @param pzlx
* @return
*/
private List<UfKjkmPO> genKjkmList(Integer pzlx) {
List<UfKjkmPO> ufKjkmList = getUfKjkmMapper().listSome(UfKjkmPO.builder().pzlx(pzlx).build());
// 封装会计科目对应的公式及辅助核算信息
2024-08-30 17:44:26 +08:00
for(UfKjkmPO kjkm: ufKjkmList) {
2024-08-28 17:42:16 +08:00
ExpressFormula expressFormula = ExpressFormula.builder().name("t")
.referenceType(ReferenceTypeEnum.FORMULA.getValue())
2024-08-30 17:44:26 +08:00
.formula(kjkm.getXzxm())
.formulaRunScript(kjkm.getXzxm())
2024-08-28 17:42:16 +08:00
.extendParam("{}")
.build();
2024-08-30 17:44:26 +08:00
kjkm.setKjkmSalaryItemFormula(expressFormula);
2024-09-04 16:15:01 +08:00
String fzhs = kjkm.getFzhs();
if (StringUtils.isNotBlank(fzhs)) {
List<Integer> fzhsIdList = Arrays.stream(fzhs.split(",")).filter(NumberUtils::isCreatable).map(Integer::valueOf).collect(Collectors.toList());
if (fzhsIdList.contains(LyFzhsTypeEnum.XMQS.getValue())) {
kjkm.setFzhsFlag(true);
}
if (fzhsIdList.contains(LyFzhsTypeEnum.FWLB.getValue())) {
kjkm.setFzhsFwlbFlag(true);
}
if (fzhsIdList.contains(LyFzhsTypeEnum.KS.getValue())) {
kjkm.setFzhsKsFlag(true);
}
if (fzhsIdList.contains(LyFzhsTypeEnum.SLLB.getValue())) {
kjkm.setFzhsSllbFlag(true);
}
}
2024-08-28 17:42:16 +08:00
}
2024-09-04 16:15:01 +08:00
return ufKjkmList;
}
2024-08-28 17:42:16 +08:00
2024-09-04 16:15:01 +08:00
/**
* 生成摘要
*
* @param chnYearMonth
* @param chnLastSeason
* @param pzlx
* @return
*/
private String genZy(String chnYearMonth,
String chnLastSeason,
Integer pzlx,
String keyName,
Integer sfsjdkm,
Map<Long, String> subCompanyMap,
UfKjkmPO kjkm,
List<String> xzffFpecialZyKjkmbm,
List<String> sbffSpecialZyKjkmbm,
String sbgjjJtMzkswlkbm) {
String[] split = keyName.split("_split");
// "职能" / "职能项目名称"
String znxmmc = split.length > 1 ? split[0] : "";
// 职能项目类型 “职能”/“项目”
String znxmlx = split.length > 2 ? split[1] : "";
// 分部id
String subCompanyId = split.length > 3 ? split[2] : "0";
StringBuilder zySb = new StringBuilder();
if (pzlx.equals(LyPZTypeEnum.XZJTPZ.getValue())) {
zySb.append("计提");
// 所在分部名称规则
// 1、如果是项目则为项目职能名称
// 2、如果是职能合并的职能固定为”职能工资“单独统计的职能为该部门对应的”分部名称“
if (znxmlx.equals("职能")) {
if (znxmmc.equals("职能")) {
zySb.append("职能");
} else {
// 分部名称
zySb.append(subCompanyMap.getOrDefault(Long.valueOf(subCompanyId), ""));
2024-08-28 17:42:16 +08:00
}
2024-09-06 15:36:20 +08:00
} else if (znxmlx.equals("项目/案场")) {
2024-09-04 16:15:01 +08:00
zySb.append(znxmmc);
}
if (sfsjdkm!= null && sfsjdkm.equals(1)) {
// 是绩效科目
zySb.append(chnLastSeason).append("绩效");
} else {
zySb.append(chnYearMonth).append("工资");
}
} else if (pzlx.equals(LyPZTypeEnum.XZFFPZ.getValue())) {
// 薪资发放凭证
// 发放+【职能、项目、分部】 +【绩效、工资、特殊会计科目】
zySb.append("发放");
if (znxmlx.equals("职能")) {
if (znxmmc.equals("职能")) {
zySb.append("职能");
} else {
// 分部名称
zySb.append(subCompanyMap.getOrDefault(Long.valueOf(subCompanyId), ""));
2024-08-28 17:42:16 +08:00
}
2024-09-06 15:36:20 +08:00
} else if (znxmlx.equals("项目/案场")) {
2024-09-04 16:15:01 +08:00
zySb.append(znxmmc);
}
if (sfsjdkm!= null && sfsjdkm.equals(1)) {
// 是绩效科目
zySb.append(chnLastSeason).append("绩效");
} else {
if (xzffFpecialZyKjkmbm.contains(kjkm.getKmbm())) {
zySb.append(kjkm.getKmmc());
} else {
zySb.append(chnYearMonth).append("工资");
}
}
} else if (pzlx.equals(LyPZTypeEnum.SBJTPZ.getValue()) || pzlx.equals(LyPZTypeEnum.GJJJTPZ.getValue())) {
// 社保公积金计提凭证
zySb.append("计提" + chnYearMonth)
.append(pzlx.equals(LyPZTypeEnum.SBJTPZ.getValue()) ? "社保" : "公积金");
} else if (pzlx.equals(LyPZTypeEnum.SBFFPZ.getValue()) || pzlx.equals(LyPZTypeEnum.GJJFFPZ.getValue())) {
// 社保公积金发放凭证
if (sbffSpecialZyKjkmbm.contains(kjkm.getKmbm())) {
zySb.append(kjkm.getKmmc());
} else {
if (sbgjjJtMzkswlkbm.equals(kjkm.getKmbm())) {
zySb.append("代缴纳");
} else {
zySb.append("银行扣");
}
zySb.append("" + chnYearMonth)
.append(pzlx.equals(LyPZTypeEnum.SBFFPZ.getValue()) ? "社保" : "公积金");
2024-08-28 17:42:16 +08:00
}
}
2024-09-04 16:15:01 +08:00
return zySb.toString();
}
2024-08-30 17:44:26 +08:00
2024-09-04 16:15:01 +08:00
/**
* 根据科目编码获取对应的全路径名称
* @param kmbm
* @param kmbmInfoMap
* @return
*/
private String getFullPathKjkm(String kmbm, Map<String, String> kmbmInfoMap) {
int length = kmbm.length();
if (length == 4) {
// 是一级科目,不需要拼接
return kmbm + "\\" + kmbmInfoMap.getOrDefault(kmbm, "");
} else if (length == 6) {
// 是二级科目,先找一级科目
String firstKjkmbm = kmbm.substring(0, 4);
String firstKjkm = kmbmInfoMap.getOrDefault(firstKjkmbm, "");
return kmbm + "\\" + firstKjkm + "\\" + kmbmInfoMap.getOrDefault(kmbm, "");
} else if (length == 8) {
// 是三级科目
String firstKjkmbm = kmbm.substring(0, 4);
String firstKjkm = kmbmInfoMap.getOrDefault(firstKjkmbm, "");
String secondKjkmbm = kmbm.substring(0, 6);
String secondKjkm = kmbmInfoMap.getOrDefault(secondKjkmbm, "");
return kmbm + "\\" + firstKjkm + "\\" + secondKjkm + "\\" +kmbmInfoMap.getOrDefault(kmbm, "");
} else {
return "科目编码格式错误!";
2024-08-30 17:44:26 +08:00
}
2024-09-04 16:15:01 +08:00
}
2024-08-30 17:44:26 +08:00
2024-09-04 16:15:01 +08:00
private String getLastSeason(Date currentDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(currentDate);
// 确定当前日期所在的季度
int currentMonth = cal.get(Calendar.MONTH) + 1;
int currentQuarter = (currentMonth - 1) / 3 + 1;
// 计算上一个季度的季度号
int previousQuarter = currentQuarter - 1;
int previousYear = cal.get(Calendar.YEAR);
// 如果上一个季度跨越了年度
if (previousQuarter <= 0) {
previousQuarter += 4; // 上一个季度为上一年的第四个季度
previousYear -= 1;
}
// 格式化输出
String result = previousYear + "" + previousQuarter + "季度";
return result;
}
/**
* 推送凭证
* @param pushParam
*/
@Override
public void pushUCAndSave(LyVoucherPushParam pushParam) {
// 校验会计科目是否合法
verifyKjkm(pushParam);
// 推送凭证
pushVoucher(pushParam);
// 推送成功后修改报表数据的凭证生成状态
updateReportStatus(pushParam);
// 推送成功后保存凭证
saveVoucher(pushParam);
}
2024-08-30 17:44:26 +08:00
2024-09-04 16:15:01 +08:00
/**
* 推送成功后修改报表数据的凭证生成状态
*
* @param pushParam
*/
private void updateReportStatus(LyVoucherPushParam pushParam) {
List<Long> dataSource = pushParam.getDataSource();
if (pushParam.getPzlx().equals(LyPZTypeEnum.XZJTPZ.getValue()) || pushParam.getPzlx().equals(LyPZTypeEnum.XZFFPZ.getValue())) {
List<LySalaryReportPO> salaryReportList = getLySalaryReportService(user).getByIds(dataSource);
salaryReportList.stream().forEach(po -> {
if (pushParam.getPzlx().equals(LyPZTypeEnum.XZJTPZ.getValue())) {
po.setXzjtpzFlag(NumberUtils.INTEGER_ONE);
} else if (pushParam.getPzlx().equals(LyPZTypeEnum.XZFFPZ.getValue())) {
po.setXzffpzFlag(NumberUtils.INTEGER_ONE);
}
getLySalaryReportService(user).update(po);
});
} else if (pushParam.getPzlx().equals(LyPZTypeEnum.SBJTPZ.getValue()) || pushParam.getPzlx().equals(LyPZTypeEnum.SBFFPZ.getValue())
|| pushParam.getPzlx().equals(LyPZTypeEnum.GJJJTPZ.getValue()) || pushParam.getPzlx().equals(LyPZTypeEnum.GJJFFPZ.getValue())) {
List<LySocialReportPO> socialReportList = getLySocialReportService(user).getByIds(dataSource);
socialReportList.stream().forEach(po -> {
if (pushParam.getPzlx().equals(LyPZTypeEnum.SBJTPZ.getValue())) {
po.setSbjtpzFlag(NumberUtils.INTEGER_ONE);
} else if (pushParam.getPzlx().equals(LyPZTypeEnum.SBFFPZ.getValue())) {
po.setSbffpzFlag(NumberUtils.INTEGER_ONE);
} else if (pushParam.getPzlx().equals(LyPZTypeEnum.GJJJTPZ.getValue())) {
po.setGjjjtpzFlag(NumberUtils.INTEGER_ONE);
} else if (pushParam.getPzlx().equals(LyPZTypeEnum.GJJFFPZ.getValue())) {
po.setGjjffpzFlag(NumberUtils.INTEGER_ONE);
}
getLySocialReportService(user).update(po);
});
}
}
2024-08-28 17:42:16 +08:00
2024-09-04 16:15:01 +08:00
/**
* 保存凭证
* @param pushParam
*/
private void saveVoucher(LyVoucherPushParam pushParam) {
Date now = new Date();
long mainId = IdGenerator.generate();
LyVoucherPO voucher = LyVoucherPO
.builder()
.id(mainId)
.pzlx(pushParam.getPzlx())
2024-09-06 15:36:20 +08:00
.dataSource(StringUtils.join(pushParam.getDataSource(), ","))
2024-09-04 16:15:01 +08:00
.ffgsqc(pushParam.getFfgsqc())
.salaryMonth(SalaryDateUtil.dateStrToLocalYearMonth(pushParam.getSalaryMonth()))
.pkVoucher(pushParam.getPkVoucher())
.status(pushParam.getStatus())
2024-09-13 13:32:01 +08:00
.pushMsg(pushParam.getPushMsg())
2024-09-04 16:15:01 +08:00
.creator(Long.valueOf(user.getUID()))
.createTime(now)
.updateTime(now)
.deleteType(0)
.build();
getLyVoucherMapper().insertIgnoreNull(voucher);
pushParam.getDetails().stream().forEach(detail -> {
LyVoucherDetailPO voucherDetail = LyVoucherDetailPO
.builder()
.id(IdGenerator.generate())
.voucherId(mainId)
.zy(detail.getZy())
.kjkmId(detail.getKjkm())
.fzhsXmqsBm(detail.getFzhsXmqs())
.fzhsFwlbBm(detail.getFzhsFwlb())
.fzhsSllbBm(detail.getFzhsSllb())
.fzhsKsBm(detail.getFzhsKs())
2024-09-06 15:36:20 +08:00
.fzhsOtherBms(CollectionUtils.isEmpty(detail.getFzhsOtherBmList()) ? "" : StringUtils.join(detail.getFzhsOtherBmList(), ","))
2024-09-04 16:15:01 +08:00
.jfValue(detail.getJfValue())
.dfValue(detail.getDfValue())
.creator(Long.valueOf(user.getUID()))
.createTime(now)
.updateTime(now)
.deleteType(0).build();
getLyVoucherDetailMapper().insertIgnoreNull(voucherDetail);
});
}
2024-08-28 17:42:16 +08:00
2024-09-04 16:15:01 +08:00
/**
* 推送凭证
* @param pushParam
*/
private void pushVoucher(LyVoucherPushParam pushParam) {
2024-09-13 13:32:01 +08:00
pushParam.setStatus(NumberUtils.INTEGER_ONE);
pushParam.setPushMsg("推送成功");
2024-09-26 17:19:07 +08:00
// Calendar cal = Calendar.getInstance();
// cal.setTime(new Date());
//
// LyNCVoucher lyNCVoucher = new LyNCVoucher();
// // 凭证类别 非空 (凭证类别)
// lyNCVoucher.setPkVouchertype("01");
// // 会计年度 非空
// lyNCVoucher.setYear(String.valueOf(cal.get(Calendar.YEAR)));
// // 来源系统 非空 只支持模块编号
// lyNCVoucher.setPkSystem("GL");
// // 凭证类型值 0正常凭证 3数量调整凭证 不可空
// lyNCVoucher.setVoucherkind("0");
// // 核算账簿 非空 账簿_财务核算账簿
// lyNCVoucher.setPkAccountingbook("201-0003");
// // 会计期间 非空
// lyNCVoucher.setPeriod("02");
// // 制单日期 非空
// lyNCVoucher.setPrepareddate("2024-02-22 00:00:00");
// // 制单人 非空 (用户)
// lyNCVoucher.setPkPrepared("fw");
// //所属组织 非空 (组织)
// lyNCVoucher.setPkOrg("101");
// lyNCVoucher.setDiscardflag("N");
//
//
// List<LyVoucherDetailPushParam> jfDetailList = new ArrayList<>();
// List<LyVoucherDetailPushParam> dfDetailList = new ArrayList<>();
// pushParam.getDetails().stream().forEach(detail -> {
// if ((StringUtils.isNotBlank(detail.getJfValue())) && (!"0.00".equals(detail.getJfValue()))) {
// jfDetailList.add(detail);
// } else {
// dfDetailList.add(detail);
// }
// });
// ArrayList<LyNCVoucherDetail> lyNCVoucherDetailList = new ArrayList<>();
// // 借方分录
// for (int i = 0; i < jfDetailList.size(); i++) {
// LyVoucherDetailPushParam detailParam = jfDetailList.get(i);
// LyNCVoucherDetail lyNCVoucherDetail = new LyNCVoucherDetail();
// // 分录号 非空
// lyNCVoucherDetail.setDetailindex(String.valueOf(i+1));
// // 摘要 非空
// lyNCVoucherDetail.setExplanation(detailParam.getZy());
// // 折本汇率
// lyNCVoucherDetail.setExcrate2("1");
// // 原币借方金额
// lyNCVoucherDetail.setDebitamount(detailParam.getJfValue());
// // 本币借方金额 可空
// lyNCVoucherDetail.setLocaldebitamount(detailParam.getJfValue());
// // 币种 非空
// lyNCVoucherDetail.setPkCurrtype("CNY");
// // 科目 非空
// String kjkm = detailParam.getKjkm();
// String kjkmbm = kjkm.split("\\\\")[0];
// lyNCVoucherDetail.setPkAccasoa(kjkmbm);
// // 辅助核算
// List<LyNCVoucherAss> lyNCVoucherAssList = new ArrayList<>();
// if (StringUtils.isNotBlank(detailParam.getFzhsXmqs())) {
// LyNCVoucherAss ass = new LyNCVoucherAss();
// ass.setPkChecktype("");
// ass.setPkCheckvalue(detailParam.getFzhsXmqs());
// lyNCVoucherAssList.add(ass);
// }
// if (StringUtils.isNotBlank(detailParam.getFzhsFwlb())) {
// LyNCVoucherAss ass = new LyNCVoucherAss();
// ass.setPkChecktype("");
// ass.setPkCheckvalue(detailParam.getFzhsFwlb());
// lyNCVoucherAssList.add(ass);
// }
// if (StringUtils.isNotBlank(detailParam.getFzhsSllb())) {
// LyNCVoucherAss ass = new LyNCVoucherAss();
// ass.setPkChecktype("");
// ass.setPkCheckvalue(detailParam.getFzhsSllb());
// lyNCVoucherAssList.add(ass);
// }
// if (StringUtils.isNotBlank(detailParam.getFzhsKs())) {
// LyNCVoucherAss ass = new LyNCVoucherAss();
// ass.setPkChecktype("");
// ass.setPkCheckvalue(detailParam.getFzhsKs());
// lyNCVoucherAssList.add(ass);
// }
// lyNCVoucherDetail.setAss(lyNCVoucherAssList);
// lyNCVoucherDetailList.add(lyNCVoucherDetail);
// }
//
// // 贷方分录
// for (int i = 0; i < dfDetailList.size(); i++) {
// LyVoucherDetailPushParam detailParam = dfDetailList.get(i);
// LyNCVoucherDetail lyNCVoucherDetail = new LyNCVoucherDetail();
// // 分录号 非空
// lyNCVoucherDetail.setDetailindex(lyNCVoucherDetailList.size() + String.valueOf(i+1));
// // 摘要 非空
// lyNCVoucherDetail.setExplanation(detailParam.getZy());
// // 折本汇率
// lyNCVoucherDetail.setExcrate2("1");
// // 原币借方金额
// lyNCVoucherDetail.setCreditamount(detailParam.getDfValue());
// // 本币借方金额 可空
// lyNCVoucherDetail.setLocalcreditamount(detailParam.getDfValue());
// // 币种 非空
// lyNCVoucherDetail.setPkCurrtype("CNY");
// // 科目 非空
// String kjkm = detailParam.getKjkm();
// String kjkmbm = kjkm.split("\\\\")[0];
// lyNCVoucherDetail.setPkAccasoa(kjkmbm);
// // 辅助核算
// List<LyNCVoucherAss> lyNCVoucherAssList = new ArrayList<>();
// if (StringUtils.isNotBlank(detailParam.getFzhsXmqs())) {
// LyNCVoucherAss ass = new LyNCVoucherAss();
// ass.setPkChecktype("");
// ass.setPkCheckvalue(detailParam.getFzhsXmqs());
// lyNCVoucherAssList.add(ass);
// }
// if (StringUtils.isNotBlank(detailParam.getFzhsFwlb())) {
// LyNCVoucherAss ass = new LyNCVoucherAss();
// ass.setPkChecktype("");
// ass.setPkCheckvalue(detailParam.getFzhsFwlb());
// lyNCVoucherAssList.add(ass);
// }
// if (StringUtils.isNotBlank(detailParam.getFzhsSllb())) {
// LyNCVoucherAss ass = new LyNCVoucherAss();
// ass.setPkChecktype("");
// ass.setPkCheckvalue(detailParam.getFzhsSllb());
// lyNCVoucherAssList.add(ass);
// }
// if (StringUtils.isNotBlank(detailParam.getFzhsKs())) {
// LyNCVoucherAss ass = new LyNCVoucherAss();
// ass.setPkChecktype("");
// ass.setPkCheckvalue(detailParam.getFzhsKs());
// lyNCVoucherAssList.add(ass);
// }
// lyNCVoucherDetail.setAss(lyNCVoucherAssList);
// lyNCVoucherDetailList.add(lyNCVoucherDetail);
// }
// lyNCVoucher.setDetails(lyNCVoucherDetailList);
// LyNCVoucherHead voucherHead = new LyNCVoucherHead();
// voucherHead.setVoucherHead(lyNCVoucher);
//
// LyNCVoucherUfinterface lyNCVoucherUfinterface = new LyNCVoucherUfinterface();
// lyNCVoucherUfinterface.setVoucher(voucherHead);
// lyNCVoucherUfinterface.setAccount("develop");
// lyNCVoucherUfinterface.setBilltype("vouchergl");
// lyNCVoucherUfinterface.setBusinessunitcode("develop");
// lyNCVoucherUfinterface.setFilename("");
// lyNCVoucherUfinterface.setGroupcode("");
// lyNCVoucherUfinterface.setIsexchange("");
// lyNCVoucherUfinterface.setOrgcode("");
// lyNCVoucherUfinterface.setReceiver("0001121000000000JIYO");
// lyNCVoucherUfinterface.setReplace("");
// lyNCVoucherUfinterface.setRoottag("");
// lyNCVoucherUfinterface.setSender("OA");
//
// String xml = "<?xml version=\"1.0\" encoding='UTF-8'?>" + XStreamUtil.marshal(lyNCVoucherUfinterface);
// System.out.println(xml);
//
//
// HttpClient httpClient = new HttpClient();
// PostMethod httpPost = new PostMethod("http://172.18.0.10:8090/service/XChangeServlet?account=002&groupcode=leading");
// httpPost.setRequestHeader("content-type", "application/json;charset=utf-8");
//
// String result = "";
// try {
// RequestEntity entity = new StringRequestEntity(xml, "application/json", "UTF-8");
// httpPost.setRequestEntity(entity);
// httpClient.executeMethod(httpPost);
// result = httpPost.getResponseBodyAsString();
// System.out.println(result);
// LyNCVoucherReturn lyNCVoucherReturn = XStreamUtil.unmarshal(LyNCVoucherReturn.class, result);
// System.out.println(lyNCVoucherReturn);
//
//
// } catch (Exception e) {
// System.out.println("d");
// }
// throw new SalaryRunTimeException("hi");
2024-09-24 16:31:04 +08:00
2024-08-28 17:42:16 +08:00
// test 生成xml
// List<LyVoucherAss> assList = new ArrayList<>();
// assList.add(LyVoucherAss.builder()
// .pkChecktype("first")
// .pkCheckvalue("ff")
// .build());
// assList.add(LyVoucherAss.builder()
// .pkChecktype("second")
// .pkCheckvalue("fd")
// .build());
//
// List<LyVoucherDetail> lyVoucherDetails = new ArrayList<>();
// lyVoucherDetails.add(LyVoucherDetail.builder()
// .detailindex("what")
// .explanation("hfdsuhfad")
// .debitamount("1000")
// .pkCurrtype("RMB")
// .pkAccasoa("kemu")
// .ass(assList)
// .build());
//
// LyVoucher build = LyVoucher.builder()
// .pkVoucher("123")
// .pkVouchertype("type")
// .year("2024")
// .pkSystem("system")
// .voucherkind("0")
// .pkAccountingbook("1")
// .period("04")
// .prepareddate("2024-08-01")
// .pkPrepared("par")
// .pkOrg("org")
// .details(lyVoucherDetails)
// .build();
//
// String xml = XStreamUtil.marshal(build);
// System.out.println(xml);
2024-09-04 16:15:01 +08:00
}
2024-08-28 17:42:16 +08:00
2024-09-04 16:15:01 +08:00
/**
* 校验会计科目是否合法
* @param pushParam
*/
private void verifyKjkm(LyVoucherPushParam pushParam) {
// 校验科目id是否合规
Map<String, String> kmbmInfoMap = new HashMap<>();
List<UfKjkmPO> allKjkm = getUfKjkmMapper().listAll();
allKjkm.forEach(po -> kmbmInfoMap.put(po.getKmbm(), po.getKmmc()));
List<LyVoucherDetailPushParam> details = pushParam.getDetails();
List<String> kjlmList = new ArrayList<>();
details.stream().forEach(detail -> {
2024-09-06 15:36:20 +08:00
String kjkm = detail.getKjkm();
if (StringUtils.isNotBlank(kjkm)) {
kjlmList.add(kjkm);
} else {
throw new SalaryRunTimeException("会计科目不能为空");
2024-09-04 16:15:01 +08:00
}
});
List<String> failList = kjlmList.stream()
.filter(StringUtils::isNotBlank)
.distinct()
.filter(fullPath -> {
2024-09-06 15:36:20 +08:00
String[] split = fullPath.split("\\\\");
String kjkm = split[0];
2024-09-04 16:15:01 +08:00
String fullPathKjkm = getFullPathKjkm(kjkm, kmbmInfoMap);
2024-09-06 15:36:20 +08:00
return !fullPath.equals(fullPathKjkm);
2024-09-04 16:15:01 +08:00
}).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(failList)) {
throw new SalaryRunTimeException("推送凭证失败,以下科目信息不存在:" + failList);
}
2024-08-28 17:42:16 +08:00
}
/**
2024-09-04 16:15:01 +08:00
* 本地历史凭证列表
*
* @param queryParam
2024-08-28 17:42:16 +08:00
* @return
*/
2024-09-04 16:15:01 +08:00
@Override
public PageInfo<LyVoucherPO> historyVoucherList(LyVoucherQueryParam queryParam) {
List<LyVoucherPO> lyVoucherPOS = getLyVoucherMapper().listSome(LyVoucherPO.builder()
.pzlx(queryParam.getPzlx())
.salaryMonth(SalaryDateUtil.dateStrToLocalYearMonth(queryParam.getSalaryMonth()))
.id(queryParam.getId())
.build());
// 筛选法人主体
if (StringUtils.isNotBlank(queryParam.getFrzt())) {
lyVoucherPOS = lyVoucherPOS.stream().filter(po -> po.getFfgsqc().contains(queryParam.getFrzt())).collect(Collectors.toList());
2024-08-28 17:42:16 +08:00
}
2024-09-06 15:36:20 +08:00
// 分权
// 是否是薪酬总管理员
boolean isChief = getTaxAgentService(user).isChief((long) user.getUID());
if (!isChief) {
List<String> canManageFrztByUid = getLySalaryReportService(user).getCanManageFrztByUid(user);
lyVoucherPOS = lyVoucherPOS.stream().filter(po -> canManageFrztByUid.contains(po.getFfgsqc())).collect(Collectors.toList());
}
2024-09-04 16:15:01 +08:00
PageInfo<LyVoucherPO> pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), lyVoucherPOS, LyVoucherPO.class);
List<LyVoucherPO> list = pageInfo.getList();
2024-09-13 13:32:01 +08:00
list.stream().forEach(voucher -> {
voucher.setPzlxStr(LyPZTypeEnum.getDefaultLabelByValue(voucher.getPzlx()));
voucher.setPushStatusStr(voucher.getStatus() != null && voucher.getStatus().equals(NumberUtils.INTEGER_ONE) ? "成功" : "失败");
voucher.setErrorMsg(voucher.getStatus() != null && voucher.getStatus().equals(NumberUtils.INTEGER_ONE) ? "" : voucher.getErrorMsg());
});
2024-09-04 16:15:01 +08:00
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), lyVoucherPOS, LyVoucherPO.class);
2024-08-28 17:42:16 +08:00
}
2024-09-04 16:15:01 +08:00
@Override
2024-09-05 09:05:57 +08:00
public Map<String, Object> historyVoucherDetailList(Long voucherId) {
2024-09-04 16:15:01 +08:00
if (voucherId == null) {
2024-09-05 09:05:57 +08:00
return Collections.emptyMap();
2024-09-04 16:15:01 +08:00
}
List<LyVoucherDetailPO> lyVoucherDetailList = getLyVoucherDetailMapper().listSome(LyVoucherDetailPO.builder()
.voucherId(voucherId)
.build());
// 获取辅助核算浏览框list
List<String> fzhsBmList = new ArrayList<>();
lyVoucherDetailList.stream().forEach(detailPO -> {
fzhsBmList.add(detailPO.getFzhsXmqsBm());
fzhsBmList.add(detailPO.getFzhsFwlbBm());
fzhsBmList.add(detailPO.getFzhsSllbBm());
fzhsBmList.add(detailPO.getFzhsKsBm());
if (StringUtils.isNotBlank(detailPO.getFzhsOtherBms())) {
List<String> bmList = Arrays.stream(detailPO.getFzhsOtherBms().split(",")).collect(Collectors.toList());
fzhsBmList.addAll(bmList);
}
});
List<String> finalFzhsBmList = fzhsBmList.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
Map<String, LyFzhsBrowser> fzhsBrowserByBm = getFzhsBrowserByBm(finalFzhsBmList);
List<LyVoucherDetailDTO> dtoList = lyVoucherDetailList.stream().map(detailPO -> {
String fzhsOtherBmStr = detailPO.getFzhsOtherBms();
List<LyFzhsBrowser> fzhsOtherBrowserList = new ArrayList<>();
if (StringUtils.isNotBlank(fzhsOtherBmStr)) {
fzhsOtherBrowserList = Arrays.stream(fzhsOtherBmStr.split(","))
.map(bm -> fzhsBrowserByBm.get(bm))
.filter(browser -> browser != null)
.collect(Collectors.toList());
}
return LyVoucherDetailDTO.builder()
.voucherId(detailPO.getVoucherId())
.zy(detailPO.getZy())
.kjkmId(detailPO.getKjkmId())
.fzhsXmqsBrowser(fzhsBrowserByBm.get(detailPO.getFzhsXmqsBm()))
.fzhsFwlbBrowser(fzhsBrowserByBm.get(detailPO.getFzhsFwlbBm()))
.fzhsSllbBrowser(fzhsBrowserByBm.get(detailPO.getFzhsSllbBm()))
.fzhsKsBrowser(fzhsBrowserByBm.get(detailPO.getFzhsKsBm()))
.fzhsOtherBrowserList(fzhsOtherBrowserList)
.jfValue(detailPO.getJfValue())
.dfValue(detailPO.getDfValue())
.build();
}).collect(Collectors.toList());
2024-09-05 09:05:57 +08:00
PageInfo<LyVoucherDetailDTO> pageInfo = new PageInfo<>(LyVoucherDetailDTO.class);
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("data", dtoList);
resultMap.put("columns", pageInfo.getColumns());
return resultMap;
2024-09-04 16:15:01 +08:00
}
2024-09-06 15:36:20 +08:00
@Override
public void deleteHistoryVoucher(Long voucherId) {
// 判断是否是薪酬总管理员
boolean isChief = getTaxAgentService(user).isChief((long) user.getUID());
if (isChief) {
2024-09-13 13:32:01 +08:00
LyVoucherPO voucherPO = getLyVoucherMapper().getById(voucherId);
2024-09-06 15:36:20 +08:00
getLyVoucherMapper().delete(LyVoucherPO.builder().id(voucherId).build());
getLyVoucherDetailMapper().delete(LyVoucherDetailPO.builder().voucherId(voucherId).build());
2024-09-13 13:32:01 +08:00
// 修改报表中数据推送状态
Integer pzlx = voucherPO.getPzlx();
String dataSourceStr = voucherPO.getDataSource();
List<Long> dataSourceIdList = new ArrayList<>();
if (StringUtils.isNotBlank(dataSourceStr)) {
dataSourceIdList = Arrays.stream(dataSourceStr.split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList());
}
if (pzlx.equals(LyPZTypeEnum.XZJTPZ.getValue()) || pzlx.equals(LyPZTypeEnum.XZFFPZ.getValue())) {
// 薪资
List<LySalaryReportPO> lySalaryReportList = getLySalaryReportService(user).listByIds(dataSourceIdList);
lySalaryReportList.stream().forEach(po -> {
if (pzlx.equals(LyPZTypeEnum.XZJTPZ.getValue())) {
po.setXzjtpzFlag(NumberUtils.INTEGER_ZERO);
} else {
po.setXzffpzFlag(NumberUtils.INTEGER_ZERO);
}
getLySalaryReportService(user).updateIgnoreNull(po);
});
} else if (pzlx.equals(LyPZTypeEnum.SBJTPZ.getValue()) || pzlx.equals(LyPZTypeEnum.SBFFPZ.getValue())) {
// 社保
List<LySocialReportPO> lySocialReportList = getLySocialReportService(user).getByIds(dataSourceIdList);
lySocialReportList.stream().forEach(po -> {
if (pzlx.equals(LyPZTypeEnum.SBJTPZ.getValue())) {
po.setSbjtpzFlag(NumberUtils.INTEGER_ZERO);
} else {
po.setSbffpzFlag(NumberUtils.INTEGER_ZERO);
}
getLySocialReportService(user).updateIgnoreNull(po);
});
} else {
// 公积金
}
2024-09-06 15:36:20 +08:00
}
}
2024-08-28 17:42:16 +08:00
}