|
|
@@ -11,6 +11,7 @@ import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
|
import nckd.jxccl.sit.hcsi.common.constant.SitConstant;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -54,7 +55,31 @@ public class AnnualIncomeCalculateService {
|
|
|
// 取业务数据提报中的数据
|
|
|
Map<Long, Map<Long, String>> bizData = getBizData(bizItemMap);
|
|
|
// 处理页面数据
|
|
|
- return dealData(fileMap, employeeIds, incomeBillData, bizItemMap, bizData);
|
|
|
+ int successCount = dealData(fileMap, employeeIds, incomeBillData, bizItemMap, bizData);
|
|
|
+ // 更新年收入统计单状态
|
|
|
+ updateSalIncomeBillStatus(incomeBillData.keySet());
|
|
|
+
|
|
|
+ return successCount;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新年收入统计单状态
|
|
|
+ * @param employeeIds
|
|
|
+ */
|
|
|
+ private void updateSalIncomeBillStatus(Set<Long> employeeIds) {
|
|
|
+ QFilter filter = new QFilter("nckd_entryentity.nckd_employee.id", QCP.in, employeeIds);
|
|
|
+ filter.and("nckd_calyear", QCP.equals, year);
|
|
|
+ filter.and("nckd_entryentity.nckd_pushstatus", QCP.equals, "0");
|
|
|
+ DynamicObject[] billDyns = SitConstant.SALINCOMEBILL_HELPER.load(SitConstant.SALINCOMEBILL_SELECTFIELDS, new QFilter[]{filter});
|
|
|
+ for(DynamicObject bill : billDyns) {
|
|
|
+ DynamicObjectCollection entryCols = bill.getDynamicObjectCollection("nckd_entryentity");
|
|
|
+ for (DynamicObject entry : entryCols) {
|
|
|
+ if(employeeIds.contains(entry.getLong("nckd_employee.id"))) {
|
|
|
+ entry.set("nckd_pushstatus", "1");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ SitConstant.SALINCOMEBILL_HELPER.update(billDyns);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -83,12 +108,15 @@ public class AnnualIncomeCalculateService {
|
|
|
|
|
|
BigDecimal amount1 = BigDecimal.ZERO;
|
|
|
BigDecimal amount2 = BigDecimal.ZERO;
|
|
|
+ BigDecimal month1 = BigDecimal.ZERO;
|
|
|
+ BigDecimal month2 = BigDecimal.ZERO;
|
|
|
|
|
|
Map incomeBillMap = incomeBillData.get(employeeId);
|
|
|
if(!ObjectUtils.isEmpty(incomeBillMap)) {
|
|
|
dyn.set("nckd_sysmonth", incomeBillMap.get("totalMonth"));
|
|
|
dyn.set("nckd_sysyearamount", incomeBillMap.get("totalAmount"));
|
|
|
amount1 = (BigDecimal) incomeBillMap.get("totalAmount");
|
|
|
+ month1 = BigDecimal.valueOf((int) incomeBillMap.get("totalMonth"));
|
|
|
}
|
|
|
Map<Long, String> bizDataMap = bizData.get(employeeId);
|
|
|
if(!ObjectUtils.isEmpty(bizDataMap)) {
|
|
|
@@ -98,6 +126,7 @@ public class AnnualIncomeCalculateService {
|
|
|
case "nckd_outmonth":
|
|
|
int month = Integer.parseInt(bizDataMap.get(bizItemId));
|
|
|
dyn.set(matchKey, month);
|
|
|
+ month2 = new BigDecimal(month);
|
|
|
break;
|
|
|
case "nckd_outyearamount":
|
|
|
BigDecimal amount = new BigDecimal(bizDataMap.get(bizItemId));
|
|
|
@@ -107,8 +136,9 @@ public class AnnualIncomeCalculateService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- // 申报年度社保缴费基数
|
|
|
- dyn.set("nckd_totalamount", amount1.add(amount2));
|
|
|
+ // 申报年度社保缴费基数 = (江铜内年度收入 + 江铜外年度收入) / (江铜内发放月数 + 外单位发放月数)
|
|
|
+ BigDecimal totalAmount = calculateTotalAmount(amount1, amount2, month1, month2);
|
|
|
+ dyn.set("nckd_totalamount", totalAmount);
|
|
|
billCols.add(dyn);
|
|
|
}
|
|
|
// 保存数据
|
|
|
@@ -118,6 +148,18 @@ public class AnnualIncomeCalculateService {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ public BigDecimal calculateTotalAmount (BigDecimal amount1,BigDecimal amount2, BigDecimal month1, BigDecimal month2) {
|
|
|
+ // 分子
|
|
|
+ BigDecimal numerator = amount1.add(amount2);
|
|
|
+ // 分母
|
|
|
+ BigDecimal denominator = month1.add(month2);
|
|
|
+ if (denominator.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ // 分母为零,无法进行除法运算,返回 null 作为一种信号
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ return numerator.divide(denominator, 2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取计薪人员ID
|
|
|
* @return
|
|
|
@@ -143,13 +185,14 @@ public class AnnualIncomeCalculateService {
|
|
|
|
|
|
/**
|
|
|
* 获取薪酬模块-年收入统计中的数据
|
|
|
- *
|
|
|
+ * 只取 推送状态 = 社保未拉取 的数据
|
|
|
* @param employeeIds
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<Long, Map> getSalIncomeBillData(Set<Long> employeeIds) {
|
|
|
QFilter filter = new QFilter("nckd_entryentity.nckd_employee.id", QCP.in, employeeIds);
|
|
|
filter.and("nckd_calyear", QCP.equals, year);
|
|
|
+ filter.and("nckd_entryentity.nckd_pushstatus", QCP.equals, "0");
|
|
|
DynamicObjectCollection cols = SitConstant.SALINCOMEBILL_HELPER.queryOriginalCollection(SitConstant.SALINCOMEBILL_SELECTFIELDS, new QFilter[]{filter});
|
|
|
|
|
|
//按照人员汇总
|