Commit 81bc02c1 authored by 刘_震's avatar 刘_震

汇总接口的实现(财务)

parent f1cddc2e
......@@ -5,6 +5,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.model.wages.dao.WagesDetailsOriginalExcelDAO;
import com.ruoyi.system.model.wages.dto.WagesFormulaListDto;
import com.ruoyi.system.model.wages.vo.WagesFormulaVo;
import com.ruoyi.system.model.wages.vo.WagesLxVo;
import com.ruoyi.system.model.wages.vo.WagesOverviewOriginalDataVO;
import com.ruoyi.system.service.WagesService;
import org.slf4j.Logger;
......@@ -89,8 +90,8 @@ public class WagesController {
@PostMapping("/lxSummary")
public List<WagesFormulaVo> lxSummary(@RequestBody WagesFormulaListDto wagesFormulaListDto){
List<WagesFormulaVo> list = wagesService.lxSummary(wagesFormulaListDto);
public List<WagesLxVo> lxSummary(@RequestBody WagesFormulaListDto wagesFormulaListDto){
List<WagesLxVo> list = wagesService.lxSummary(wagesFormulaListDto);
return list;
}
......
......@@ -21,6 +21,10 @@ public interface WagesCompilationMapper {
List<WagesCompilationExcelDAO> selectByMineIdAndType(@Param("mineId") String mineId, @Param("type") String type);
WagesCompilationExcelDAO select(@Param("mineId") String mineId, @Param("type") String type);
WagesCompilationExcelDAO selectByMineIdAndTypeAndVersionId(@Param("mineId")String mineId, @Param("type")String type, @Param("versionId") Integer versionId);
List<WagesCompilationExcelDAO> selectByComparisonId(Integer comparisonId);
......
......@@ -18,4 +18,6 @@ public interface WagesDetailsMapper {
void deleteBatch(@Param("mineId") String mineId, @Param("date") String date, @Param("comparisonId") Integer comparisonId);
List<WagesDetailsExcelDAO> selectByDate(@Param("date") String date);
List<WagesDetailsExcelDAO> selectByComparisonId(Integer comparisonId);
}
package com.ruoyi.system.model.wages.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author haiwe
* @date 2024/6/18
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WagesLxVo {
//部门名
private String dep;
// 页面展示字段
private String label;
// 列数
private String c;
// 值
private String value;
}
......@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.ruoyi.system.model.wages.dao.WagesDetailsOriginalExcelDAO;
import com.ruoyi.system.model.wages.dto.WagesFormulaListDto;
import com.ruoyi.system.model.wages.vo.WagesFormulaVo;
import com.ruoyi.system.model.wages.vo.WagesLxVo;
import com.ruoyi.system.model.wages.vo.WagesOverviewOriginalDataVO;
import org.springframework.web.multipart.MultipartFile;
......@@ -24,5 +25,5 @@ public interface WagesService {
String linXiExcelAnalysisWages(MultipartFile file, String date, String mineId, String identification);
List<WagesFormulaVo> lxSummary(WagesFormulaListDto wagesFormulaListDto);
List<WagesLxVo> lxSummary(WagesFormulaListDto wagesFormulaListDto);
}
......@@ -8,6 +8,7 @@ import com.ruoyi.system.model.wages.dto.WagesFormulaDto;
import com.ruoyi.system.model.wages.dto.WagesFormulaListDto;
import com.ruoyi.system.model.wages.vo.WagesFormulaVo;
import com.ruoyi.system.service.WagesCalculateConversionService;
import com.ruoyi.system.utils.CountUtils;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
......@@ -27,7 +28,6 @@ public class WagesCalculateConversionServiceImpl implements WagesCalculateConver
private final WagesDetailsOriginalDataMapper detailsOriginalDataMapper;
private final WagesOverviewOriginalDateMapper originalDateMapper;
private static final List<Character> FH = Arrays.asList('+', '-', '*', '/');
@Override
public List<WagesFormulaVo> conversionSurface(WagesFormulaListDto wagesFormulaListDto) {
......@@ -153,7 +153,7 @@ public class WagesCalculateConversionServiceImpl implements WagesCalculateConver
// vo.setValue(count(value));
vo.setValue(dao.getTotalWagesPayable().toString());
// 假设 count(value) 返回的是一个字符串,表示一个数值
String countString = count(value);
String countString = CountUtils.count(value);
BigDecimal countValue = BigDecimal.valueOf(Double.parseDouble(countString));
BigDecimal cadreWagesPayable = dao.getCadreWagesPayable();
BigDecimal result = countValue.subtract(cadreWagesPayable);
......@@ -180,7 +180,7 @@ public class WagesCalculateConversionServiceImpl implements WagesCalculateConver
Object fieldValue = wagesField.get(wagesDetail);
value = StringUtils.replaceOnce(value, s, fieldValue.toString());
}
vo.setValue(count(value));
vo.setValue(CountUtils.count(value));
voList.add(vo);
value = value1;
......@@ -205,7 +205,7 @@ public class WagesCalculateConversionServiceImpl implements WagesCalculateConver
value = StringUtils.replaceOnce(value, s, s);
}
}
vo.setValue(count(value));
vo.setValue(CountUtils.count(value));
voList.add(vo);
value = value1;
}
......@@ -218,75 +218,6 @@ public class WagesCalculateConversionServiceImpl implements WagesCalculateConver
return voList;
}
private String count(String value) {
value = value.replaceAll(" ", "");
char sta = value.charAt(0);
char end = value.charAt(value.length() - 1);
if (value.charAt(0) == '-' && value.charAt(1) == '-'){
value = value.substring(2);
}
if ((sta < 48 || sta > 57) && sta != '-') {
return "公式填写有误";
}
if (end < 48 || end > 57) {
return "公式填写有误";
}
return count1(value);
}
private String count1(String value) {
Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$");
if (pattern.matcher(value).matches()) {
return value;
}
// 判断是否为 x + y
boolean ifAccordOne = true;
// 判断是否为 x + y + z + ...
boolean ifAccordTwo = true;
// 记录第一个符合位置
int accordPositionOne = -1;
// 记录第二个符合位置
int accordPositionTwo = value.length();
for (int i = 0; i < value.length(); i++) {
char charAt = value.charAt(i);
if (FH.contains(charAt) && !ifAccordOne) {
ifAccordTwo = false;
accordPositionTwo = i;
break;
} else if (FH.contains(charAt)) {
if (i == 0 && value.charAt(i) == '-') continue;
ifAccordOne = false;
accordPositionOne = i;
if (value.charAt(i + 1) == '-'){
i++;
}
}
}
String sta = value.substring(0, accordPositionOne);
String end = value.substring(accordPositionOne + 1, accordPositionTwo);
char charAt = value.substring(accordPositionOne, accordPositionOne + 1).charAt(0);
String jg = "";
if (charAt == 42) {
//*
jg = new BigDecimal(sta).multiply(new BigDecimal(end)).toString();
} else if (charAt == 43) {
// +
jg = new BigDecimal(sta).add(new BigDecimal(end)).toString();
} else if (charAt == 45) {
// -
jg = new BigDecimal(sta).subtract(new BigDecimal(end)).toString();
} else if (charAt == 47) {
// /
jg = new BigDecimal(sta).divide(new BigDecimal(end)).toString();
}
if (ifAccordTwo) {
return jg;
} else {
String s = StringUtils.replaceOnce(value, value.substring(0, accordPositionTwo), jg);
value = count1(s);
}
return value;
}
private Map<String, List<String>> extractOperands(String value) {
Map<String, List<String>> operandsMap = new HashMap<>();
List<String> operands = new ArrayList<>();
......
......@@ -13,11 +13,14 @@ import com.ruoyi.system.model.wages.dao.*;
import com.ruoyi.system.model.wages.dto.WagesFormulaDto;
import com.ruoyi.system.model.wages.dto.WagesFormulaListDto;
import com.ruoyi.system.model.wages.vo.WagesFormulaVo;
import com.ruoyi.system.model.wages.vo.WagesLxVo;
import com.ruoyi.system.model.wages.vo.WagesOverviewOriginalDataVO;
import com.ruoyi.system.service.WagesService;
import com.ruoyi.system.utils.CountUtils;
import com.ruoyi.system.utils.WagesUtils;
import com.ruoyi.system.yyinterface.VoucherUtils;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
......@@ -49,7 +52,7 @@ public class WagesServiceImpl implements WagesService {
private final WagesDetailsMapper detailsMapper;
private final WagesUtils wagesUtils;
private final WagesVersionMapper wagesVersionMapper;
private final WagesCompilationMapper compilationMapper;
private final WagesCompilationMapper wagesCompilationMapper;
@Transactional
@Override
......@@ -276,13 +279,13 @@ public class WagesServiceImpl implements WagesService {
// 林西表特殊处理
if ("011704".equals(mineId)) {
if (integer == 1) {
if (identification == null){
if (identification == null) {
return "请填写excel表类型";
}
integer = identification.equals("0") ? 1 : 4;
}
if (integer == 2 || integer == 3) {
if (identification == null){
if (identification == null) {
return "请填写excel表类型";
}
integer = identification.equals("0") ? 2 : 3;
......@@ -305,9 +308,9 @@ public class WagesServiceImpl implements WagesService {
}
@Override
public List<WagesFormulaVo> lxSummary(WagesFormulaListDto wagesFormulaListDto) {
public List<WagesLxVo> lxSummary(WagesFormulaListDto wagesFormulaListDto) {
//定义一个集合用来存储前端所需要的返回值
List<WagesFormulaVo> wagesFormulaVos = new ArrayList<>();
List<WagesLxVo> wagesFormulaVos = new ArrayList<>();
//获取前端传的参数
List<WagesFormulaDto> data = wagesFormulaListDto.getData();
......@@ -321,22 +324,64 @@ public class WagesServiceImpl implements WagesService {
return null;
}
//财务用表数据查询
WagesCompilationExcelDAO compilationExcelDAOS = wagesCompilationMapper.select("011704", "1");
Integer comparisonId = compilationExcelDAOS.getComparisonId();
List<WagesDetailsExcelDAO> wagesDetailsExcelDAOS = wagesDetailsMapper.selectByComparisonId(comparisonId);
for (WagesFormulaDto wagesFormulaDto : data) {
String value = wagesFormulaDto.getValue();
//解析公式value
Map<String, List<String>> operandsMap = extractOperands(value);
//只含公式中的字段
List<String> formula = operandsMap.get("operands");
//用来保存匹配的字段名
List<String> matchedFieldNames = new ArrayList<>();
for (String s : formula) {
for (WagesDetailsExcelDAO list : lists) {
JSONObject jsonList = new JSONObject((Map<String, Object>) list);
for (int i = 1; i <= 180; i++) {
String fieldName = "a" + i;
try {
// 获取属性值
String valueFromDAO = (String) compilationExcelDAOS.getClass().getMethod("get" + fieldName.toUpperCase()).invoke(compilationExcelDAOS);
if (s.equals(valueFromDAO)) {
matchedFieldNames.add(fieldName);
}
} catch (Exception e) {
// 处理反射过程中的异常,如方法不存在、访问权限等
e.printStackTrace();
}
}
}
for (WagesDetailsExcelDAO wagesDetailsExcelDAO : wagesDetailsExcelDAOS) {
String v = value;
WagesLxVo wagesFormulaVo = new WagesLxVo();
for (int i = 0; i < matchedFieldNames.size(); i++) {
try {
String matchedFieldName = matchedFieldNames.get(i);
// 根据 matchedFieldName 构造对应的 getter 方法名
String getterMethodName = "get" + matchedFieldName.toUpperCase();
// 使用反射获取该字段的值
String valueFromDAO = (String) wagesDetailsExcelDAO.getClass().getMethod(getterMethodName).invoke(wagesDetailsExcelDAO);
valueFromDAO = (valueFromDAO == null || valueFromDAO.equals("null")) ? "0" : valueFromDAO;
v = StringUtils.replaceOnce(v, formula.get(i), valueFromDAO);
} catch (Exception e) {
// 处理反射过程中的异常,如方法不存在、访问权限等
e.printStackTrace();
}
}
wagesFormulaVo.setC(wagesFormulaDto.getC());
wagesFormulaVo.setLabel(wagesFormulaDto.getLabel());
wagesFormulaVo.setValue(CountUtils.count(v));
wagesFormulaVo.setDep(wagesDetailsExcelDAO.getA1());
wagesFormulaVos.add(wagesFormulaVo);
}
}
return wagesFormulaVos;
}
//解析公式value
private Map<String, List<String>> extractOperands(String value) {
Map<String, List<String>> operandsMap = new HashMap<>();
......@@ -373,9 +418,6 @@ public class WagesServiceImpl implements WagesService {
}
public JSONArray getCustomDoc(CustomDocRequestModel customDocRequestModel) {
ReturnResult customDocument = VoucherUtils.callVoucherQuery(customDocRequestModel, "/yonbip/digitalModel/customerdoc/list");
if (customDocument != null) {
......
package com.ruoyi.system.utils;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
/**
* @author haiwe
* @date 2024/6/18
*/
public class CountUtils {
private static final List<Character> FH = Arrays.asList('+', '-', '*', '/');
public static String count(String value) {
value = value.replaceAll(" ", "");
value = value.replaceAll(",", "");
char sta = value.charAt(0);
char end = value.charAt(value.length() - 1);
if (value.charAt(0) == '-' && value.charAt(1) == '-'){
value = value.substring(2);
}
if ((sta < 48 || sta > 57) && sta != '-') {
return "公式填写有误";
}
if (end < 48 || end > 57) {
return "公式填写有误";
}
return CountUtils.count1(value);
}
public static String count1(String value) {
Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$");
if (pattern.matcher(value).matches()) {
return value;
}
// 判断是否为 x + y
boolean ifAccordOne = true;
// 判断是否为 x + y + z + ...
boolean ifAccordTwo = true;
// 记录第一个符合位置
int accordPositionOne = -1;
// 记录第二个符合位置
int accordPositionTwo = value.length();
for (int i = 0; i < value.length(); i++) {
char charAt = value.charAt(i);
if (FH.contains(charAt) && !ifAccordOne) {
ifAccordTwo = false;
accordPositionTwo = i;
break;
} else if (FH.contains(charAt)) {
if (i == 0 && value.charAt(i) == '-') continue;
ifAccordOne = false;
accordPositionOne = i;
if (value.charAt(i + 1) == '-'){
i++;
}
}
}
String sta = value.substring(0, accordPositionOne);
String end = value.substring(accordPositionOne + 1, accordPositionTwo);
char charAt = value.substring(accordPositionOne, accordPositionOne + 1).charAt(0);
String jg = "";
if (charAt == 42) {
//*
jg = new BigDecimal(sta).multiply(new BigDecimal(end)).toString();
} else if (charAt == 43) {
// +
jg = new BigDecimal(sta).add(new BigDecimal(end)).toString();
} else if (charAt == 45) {
// -
jg = new BigDecimal(sta).subtract(new BigDecimal(end)).toString();
} else if (charAt == 47) {
// /
jg = new BigDecimal(sta).divide(new BigDecimal(end)).toString();
}
if (ifAccordTwo) {
return jg;
} else {
String s = StringUtils.replaceOnce(value, value.substring(0, accordPositionTwo), jg);
value = count1(s);
}
return value;
}
}
......@@ -194,21 +194,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectWagesComparationVerticalVo">
select comparison_id
# , a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
# a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25,
# a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38,
# a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51,
# a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a64,
# a65, a66, a67, a68, a69, a70, a71, a72, a73, a74, a75, a76, a77,
# a78, a79, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a90,
# a91, a92, a93, a94, a95, a96, a97, a98, a99, a100, a101, a102, a103,
# a104, a105, a106, a107, a108, a109, a110, a111, a112, a113, a114,
# a115, a116, a117, a118, a119, a120, a121, a122, a123, a124, a125,
# a126, a127, a128, a129, a130, a131, a132, a133, a134, a135, a136,
# a137, a138, a139, a140, a141, a142, a143, a144, a145, a146, a147,
# a148, a149, a150, a151, a152, a153, a154, a155, a156, a157, a158,
# a159, a160, a161, a162, a163, a164, a165, a166, a167, a168, a169,
# a170, a171, a172, a173, a174, a175, a176, a177, a178, a179, a180
, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25,
a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38,
a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51,
a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a64,
a65, a66, a67, a68, a69, a70, a71, a72, a73, a74, a75, a76, a77,
a78, a79, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a90,
a91, a92, a93, a94, a95, a96, a97, a98, a99, a100, a101, a102, a103,
a104, a105, a106, a107, a108, a109, a110, a111, a112, a113, a114,
a115, a116, a117, a118, a119, a120, a121, a122, a123, a124, a125,
a126, a127, a128, a129, a130, a131, a132, a133, a134, a135, a136,
a137, a138, a139, a140, a141, a142, a143, a144, a145, a146, a147,
a148, a149, a150, a151, a152, a153, a154, a155, a156, a157, a158,
a159, a160, a161, a162, a163, a164, a165, a166, a167, a168, a169,
a170, a171, a172, a173, a174, a175, a176, a177, a178, a179, a180
,mine_id, type, version_id from wages_comparation_vertical
</sql>
......@@ -415,6 +415,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectWagesComparationVerticalVo"/>
where comparison_id = #{comparisonId}
</select>
<select id="select" resultMap="WagesComparationVerticalResult">
<include refid="selectWagesComparationVerticalVo"/>
where mine_id = #{mineId} and type = #{type}
</select>
<insert id="insertBatch" parameterType="com.ruoyi.system.model.wages.dao.WagesCompilationExcelDAO" useGeneratedKeys="true" keyProperty="comparisonId">
insert into wages_comparation_vertical
......
......@@ -570,4 +570,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectWagesDetailsVo"/>
where import_time = #{date}
</select>
<select id="selectByComparisonId" resultMap="WagesDetailsResult"
parameterType="java.lang.Integer">
<include refid="selectWagesDetailsVo"/>
where comparison_id = #{comparisonId}
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment