|
@@ -4,7 +4,6 @@ import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.malk.lanyun.service.WorkService;
|
|
import com.malk.lanyun.service.WorkService;
|
|
|
import com.malk.server.aliwork.YDConf;
|
|
import com.malk.server.aliwork.YDConf;
|
|
|
import com.malk.server.aliwork.YDParam;
|
|
import com.malk.server.aliwork.YDParam;
|
|
@@ -19,9 +18,8 @@ import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
-import java.time.Instant;
|
|
|
|
|
-import java.time.LocalDateTime;
|
|
|
|
|
-import java.time.ZoneId;
|
|
|
|
|
|
|
+import java.time.*;
|
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
@@ -544,6 +542,494 @@ public class WorkServiceImpl implements WorkService {
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void quotaArchive() {
|
|
public void quotaArchive() {
|
|
|
|
|
+ LocalDate currentDate = LocalDate.now();
|
|
|
|
|
+ YearMonth lastMonth = YearMonth.from(currentDate).minusMonths(1);
|
|
|
|
|
+ String formatLastMonth = lastMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"));
|
|
|
|
|
+ String formatNowMonth = currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
|
|
|
|
|
+ // 获取月份的第一天
|
|
|
|
|
+ LocalDateTime firstDay = LocalDateTime.now().withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
|
|
|
|
|
+ // 获取月份的最后一天
|
|
|
|
|
+ LocalDateTime lastDay = LocalDateTime.now().withDayOfMonth(LocalDate.now().lengthOfMonth())
|
|
|
|
|
+ .withHour(23).withMinute(59).withSecond(59).withNano(999999999);
|
|
|
|
|
+ // 转换回时间戳
|
|
|
|
|
+ long firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
|
|
|
|
|
+ long lastDayTimestamp = lastDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
|
|
|
|
|
|
|
|
|
|
+ List<String> dateList = new ArrayList<>();
|
|
|
|
|
+ dateList.add(String.valueOf(firstDayTimestamp));
|
|
|
|
|
+ dateList.add(String.valueOf(lastDayTimestamp));
|
|
|
|
|
+ //项目点数据
|
|
|
|
|
+ List<Map> projectList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
|
+ .appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
|
|
+ .formUuid("FORM-97BA6C6C8C50416A9E5854F2F4B5C3F3R4WC")
|
|
|
|
|
+// .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lrr3rg6h", projectCode)))
|
|
|
|
|
+ .build());
|
|
|
|
|
+
|
|
|
|
|
+ //算薪结果表
|
|
|
|
|
+ List<Map> salaryList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
|
+ .appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
|
|
+ .formUuid("FORM-5F5A9EC778314542853426DC93AD474C6GWC")
|
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_4lnxn1m",dateList)))
|
|
|
|
|
+ .build());
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, Map<String, Object>> salarys = salaryList.stream().collect(
|
|
|
|
|
+ Collectors.groupingBy(
|
|
|
|
|
+ map -> (String) map.get("textField_lr8loohg").toString(),
|
|
|
|
|
+ Collectors.collectingAndThen(
|
|
|
|
|
+ Collectors.toList(),
|
|
|
|
|
+ list -> {
|
|
|
|
|
+ //企业社保
|
|
|
|
|
+ double qysb = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_420j7m8_value").toString().isEmpty() ? map.get("numberField_420j7m8_value").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ //企业公积金
|
|
|
|
|
+ double qygjj = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_528s4hl_value").toString().isEmpty() ? map.get("numberField_528s4hl_value").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ //社保公积金补贴
|
|
|
|
|
+ double sbgjj = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) (Double.parseDouble(!map.get("numberField_kp1tzw9_value").toString().isEmpty() ? map.get("numberField_kp1tzw9_value").toString() : "0.0")
|
|
|
|
|
+ + Double.parseDouble(!map.get("numberField_lixe8q3_value").toString().isEmpty() ? map.get("numberField_lixe8q3_value").toString() : "0.0"))).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ //小业主费用
|
|
|
|
|
+ double xyzfy = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_ueon7nr_value").toString().isEmpty() ? map.get("numberField_ueon7nr_value").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ //应发工资A
|
|
|
|
|
+ double yfgzA = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_bjzkeii_value").toString().isEmpty() ? map.get("numberField_bjzkeii_value").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ //甲方奖励
|
|
|
|
|
+ double jfjl = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_xn39ty3_value").toString().isEmpty() ? map.get("numberField_xn39ty3_value").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ //外派工资
|
|
|
|
|
+ double wpgz = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_apmcuk2_value").toString().isEmpty() ? map.get("numberField_apmcuk2_value").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ //绩效工资
|
|
|
|
|
+ double jxgz = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_765hruk_value").toString().isEmpty() ? map.get("numberField_765hruk_value").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ return new HashMap<String, Object>() {{
|
|
|
|
|
+ put("numberField_mfenmehs", qysb);
|
|
|
|
|
+ put("numberField_mfenmeht", qygjj);
|
|
|
|
|
+ put("numberField_mfenmehu", sbgjj);
|
|
|
|
|
+ put("numberField_mfenmehv", xyzfy);
|
|
|
|
|
+ put("numberField_mfenmehx", yfgzA);
|
|
|
|
|
+ put("numberField_mfenmehz", jfjl);
|
|
|
|
|
+ put("numberField_mfenmei1", wpgz);
|
|
|
|
|
+ put("numberField_mfenmei3", jxgz);
|
|
|
|
|
+ put("numberField_mfenmehw", qysb + qygjj + sbgjj + xyzfy);//定额工资(未加人工定额)
|
|
|
|
|
+ put("numberField_mfenmei5", yfgzA - jfjl + wpgz + jxgz + qysb + qygjj);//调整后应发工资(未加生产成本-业务外包费)
|
|
|
|
|
+ put("rgzbfz", yfgzA + wpgz + jxgz + qysb + qygjj + sbgjj);//人工占比分子
|
|
|
|
|
+ }};
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ );
|
|
|
|
|
+ //NC生产成本(取宜搭NC部门成本表)
|
|
|
|
|
+ List<Map> productionCostList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
|
+ .appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
|
|
+ .formUuid("FORM-5654B7C22E7546E9BBE7B4EF46DE08BAXZXU")
|
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_m0dkzhwp",dateList)))
|
|
|
|
|
+ .build());
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, Map<String, Object>> costCollect = productionCostList.stream().collect(
|
|
|
|
|
+ Collectors.groupingBy(
|
|
|
|
|
+ //第一层根据项目
|
|
|
|
|
+ map -> map.get("textField_mbk7mt4q").toString(),
|
|
|
|
|
+ Collectors.groupingBy(
|
|
|
|
|
+ //第二层根据科目
|
|
|
|
|
+ map -> map.get("textField_m0dkzhwv").toString(),
|
|
|
|
|
+ Collectors.collectingAndThen(
|
|
|
|
|
+ Collectors.toList(),
|
|
|
|
|
+ list -> {
|
|
|
|
|
+ //企业社保
|
|
|
|
|
+ double cost = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_m0dkzhx1_value").toString().isEmpty() ? map.get("numberField_m0dkzhx1_value").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ return new HashMap<String, Object>() {{
|
|
|
|
|
+ put("numberField_mfenmehs", cost);
|
|
|
|
|
+ }};
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
|
|
+ );
|
|
|
|
|
+ //采购订单档案
|
|
|
|
|
+ List<Map> orderList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
|
+ .appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
|
|
+ .formUuid("FORM-61F329A9DFFE4CF0BBEC0FDC34C42C03QJKQ")
|
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lr26l3h2",dateList)))
|
|
|
|
|
+ .build());
|
|
|
|
|
+ List<Map> orderSons = new ArrayList<>();
|
|
|
|
|
+ orderList.forEach(o->{
|
|
|
|
|
+ List<Map> sonList = ydService.queryDetails(YDParam.builder().
|
|
|
|
|
+ appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
|
|
+ .formInstanceId(o.get("formInstanceId").toString())
|
|
|
|
|
+ .formUuid("FORM-61F329A9DFFE4CF0BBEC0FDC34C42C03QJKQ")
|
|
|
|
|
+ .tableFieldId("tableField_lr26l3hl")
|
|
|
|
|
+ .build());
|
|
|
|
|
+ sonList.forEach(s->{
|
|
|
|
|
+ Map<String, Object> map = UtilMap.map("name, wlname, amount", s.get("textField_lup89iah"), s.get("textField_lr26l3ht"), s.get("numberField_lr26l3i1_value"));
|
|
|
|
|
+ orderSons.add(map);
|
|
|
|
|
+ });
|
|
|
|
|
+ sonList = ydService.queryDetails(YDParam.builder().
|
|
|
|
|
+ appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
|
|
+ .formInstanceId(o.get("formInstanceId").toString())
|
|
|
|
|
+ .formUuid("FORM-61F329A9DFFE4CF0BBEC0FDC34C42C03QJKQ")
|
|
|
|
|
+ .tableFieldId("tableField_ltxyt76f")
|
|
|
|
|
+ .build());
|
|
|
|
|
+ sonList.forEach(s->{
|
|
|
|
|
+ Map<String, Object> map = UtilMap.map("name, wlname, amount", s.get("textField_lup89iag"), s.get("textField_ltxyt75x"), s.get("numberField_ltxyt764_value"));
|
|
|
|
|
+ orderSons.add(map);
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ //采购订单档案工作服数据
|
|
|
|
|
+ Map<String, HashMap<String, Object>> workCloCost = orderSons.stream().filter(m -> "工作服".equals(m.get("wlname"))).collect(
|
|
|
|
|
+ Collectors.groupingBy(
|
|
|
|
|
+ //根据项目点名称
|
|
|
|
|
+ map -> map.get("name").toString(),
|
|
|
|
|
+ Collectors.collectingAndThen(
|
|
|
|
|
+ Collectors.toList(),
|
|
|
|
|
+ list -> {
|
|
|
|
|
+ //企业社保
|
|
|
|
|
+ double cost = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("amount").toString().isEmpty() ? map.get("amount").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ return new HashMap<String, Object>() {{
|
|
|
|
|
+ put("cost", cost);
|
|
|
|
|
+ }};
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ ));
|
|
|
|
|
+
|
|
|
|
|
+ //采购订单档案非工作服数据
|
|
|
|
|
+ Map<String, HashMap<String, Object>> workNoCloCost = orderSons.stream().filter(m -> !"工作服".equals(m.get("wlname"))).collect(
|
|
|
|
|
+ Collectors.groupingBy(
|
|
|
|
|
+ //根据项目点名称
|
|
|
|
|
+ map -> map.get("name").toString(),
|
|
|
|
|
+ Collectors.collectingAndThen(
|
|
|
|
|
+ Collectors.toList(),
|
|
|
|
|
+ list -> {
|
|
|
|
|
+ //企业社保
|
|
|
|
|
+ double cost = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("amount").toString().isEmpty() ? map.get("amount").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ return new HashMap<String, Object>() {{
|
|
|
|
|
+ put("cost", cost);
|
|
|
|
|
+ }};
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ ));
|
|
|
|
|
+
|
|
|
|
|
+ //设备维修账单
|
|
|
|
|
+ List<Map> repairBillList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
|
+ .appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
|
|
+ .formUuid("FORM-3B7F64C7178D49008FFE37147CA4EC33Q309")
|
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lrnaj34x",dateList)))
|
|
|
|
|
+ .build());
|
|
|
|
|
+ //设备维修账单数据
|
|
|
|
|
+ Map<String, HashMap<String, Object>> repairBillCost = repairBillList.stream().collect(
|
|
|
|
|
+ Collectors.groupingBy(
|
|
|
|
|
+ //根据项目点编号
|
|
|
|
|
+ map -> map.get("textField_m4wh44gk").toString(),
|
|
|
|
|
+ Collectors.collectingAndThen(
|
|
|
|
|
+ Collectors.toList(),
|
|
|
|
|
+ list -> {
|
|
|
|
|
+ //企业社保
|
|
|
|
|
+ double cost = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_lv27wy70_value").toString().isEmpty() ? map.get("numberField_lv27wy70_value").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ return new HashMap<String, Object>() {{
|
|
|
|
|
+ put("cost", cost);
|
|
|
|
|
+ }};
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ ));
|
|
|
|
|
+
|
|
|
|
|
+ // 获取上月份的第一天
|
|
|
|
|
+ firstDay = LocalDateTime.now().plusMonths(-1).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
|
|
|
|
|
+ // 获取上月份的最后一天
|
|
|
|
|
+ lastDay = LocalDateTime.now().plusMonths(-1).withDayOfMonth(LocalDate.now().plusMonths(-1).lengthOfMonth())
|
|
|
|
|
+ .withHour(23).withMinute(59).withSecond(59).withNano(999999999);
|
|
|
|
|
+ // 转换回时间戳
|
|
|
|
|
+ firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
|
|
|
|
|
+ lastDayTimestamp = lastDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
|
|
|
|
|
+ dateList.clear();
|
|
|
|
|
+ dateList.add(String.valueOf(firstDayTimestamp));
|
|
|
|
|
+ dateList.add(String.valueOf(lastDayTimestamp));
|
|
|
|
|
+
|
|
|
|
|
+ //上月开票档案
|
|
|
|
|
+ List<Map> lastOpenList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
|
+ .appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
|
|
+ .formUuid("FORM-6603375ED27B4D059CBB919C2BEFA44BZVOL")
|
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lw5ud9bk, selectField_lvc9x4vn",dateList,"小业主")))
|
|
|
|
|
+ .build());
|
|
|
|
|
+ //上月开票档案
|
|
|
|
|
+ Map<String, HashMap<String, Object>> lastOpens = lastOpenList.stream().collect(
|
|
|
|
|
+ Collectors.groupingBy(
|
|
|
|
|
+ //根据项目点编号
|
|
|
|
|
+ map -> map.get("textField_lvdntzul").toString(),
|
|
|
|
|
+ Collectors.collectingAndThen(
|
|
|
|
|
+ Collectors.toList(),
|
|
|
|
|
+ list -> {
|
|
|
|
|
+ //企业社保
|
|
|
|
|
+ double open = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_lvd8pp36_value").toString().isEmpty() ? map.get("numberField_lvd8pp36_value").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ return new HashMap<String, Object>() {{
|
|
|
|
|
+ put("open", open);
|
|
|
|
|
+ }};
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ ));
|
|
|
|
|
+
|
|
|
|
|
+ // 获取上上月份的第一天
|
|
|
|
|
+ firstDay = LocalDateTime.now().plusMonths(-2).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
|
|
|
|
|
+ // 获取上上月份的最后一天
|
|
|
|
|
+ lastDay = LocalDateTime.now().plusMonths(-2).withDayOfMonth(LocalDate.now().lengthOfMonth())
|
|
|
|
|
+ .withHour(23).withMinute(59).withSecond(59).withNano(999999999);
|
|
|
|
|
+ firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
|
|
|
|
|
+ lastDayTimestamp = lastDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
|
|
|
|
|
+ dateList.clear();
|
|
|
|
|
+ dateList.add(String.valueOf(firstDayTimestamp));
|
|
|
|
|
+ dateList.add(String.valueOf(lastDayTimestamp));
|
|
|
|
|
+
|
|
|
|
|
+ //上上月开票档案
|
|
|
|
|
+ List<Map> lastLastOpenList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
|
+ .appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
|
|
+ .formUuid("FORM-6603375ED27B4D059CBB919C2BEFA44BZVOL")
|
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lw5ud9bk, selectField_lvc9x4vn",dateList,"小业主")))
|
|
|
|
|
+ .build());
|
|
|
|
|
+
|
|
|
|
|
+ //上月开票档案
|
|
|
|
|
+ Map<String, HashMap<String, Object>> lastLastOpens = lastLastOpenList.stream().collect(
|
|
|
|
|
+ Collectors.groupingBy(
|
|
|
|
|
+ //根据项目点编号
|
|
|
|
|
+ map -> map.get("textField_lvdntzul").toString(),
|
|
|
|
|
+ Collectors.collectingAndThen(
|
|
|
|
|
+ Collectors.toList(),
|
|
|
|
|
+ list -> {
|
|
|
|
|
+ //企业社保
|
|
|
|
|
+ double open = list.stream()
|
|
|
|
|
+ .mapToDouble(map -> ((Number) Double.parseDouble(!map.get("numberField_lvd8pp36_value").toString().isEmpty() ? map.get("numberField_lvd8pp36_value").toString() : "0.0")).doubleValue())
|
|
|
|
|
+ .sum();
|
|
|
|
|
+ return new HashMap<String, Object>() {{
|
|
|
|
|
+ put("open", open);
|
|
|
|
|
+ }};
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ ));
|
|
|
|
|
+ //数据整合处理
|
|
|
|
|
+ projectList.forEach(e->{
|
|
|
|
|
+ String name = e.get("textField_lrr3rg6i").toString();
|
|
|
|
|
+ String code = e.get("textField_ltxrn8h1").toString();
|
|
|
|
|
+ List<Map<String,Object>> objects = new ArrayList<>();
|
|
|
|
|
+ Map<String, Object> map = UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle",
|
|
|
|
|
+ "APP_TKO2FYGFQYQQMQFUTUU5", "FORM-EA91EECA918848EA9EFFA87107B60BD0SLXX", "receipt",
|
|
|
|
|
+ e.get("formInstanceId"), name, code);
|
|
|
|
|
+ objects.add(map);
|
|
|
|
|
+ Map<String, Object> dataMap = UtilMap.map("associationFormField_mfo3dvqa, textField_mfenmegp",
|
|
|
|
|
+ objects, e.get("textField_ltxrn8h1"));
|
|
|
|
|
+ if (ObjectUtil.isNotNull(e.get("employeeField_lw1usgpt_id"))){
|
|
|
|
|
+ //项目点负责人
|
|
|
|
|
+ String xmdfzr = e.get("employeeField_lw1usgpt_id").toString();
|
|
|
|
|
+ JSONArray xmdfzrArray = JSONArray.parseArray(xmdfzr);
|
|
|
|
|
+ dataMap.put("employeeField_mfo3dvpt",xmdfzrArray.get(0));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (ObjectUtil.isNotNull(e.get("employeeField_lrpswhaj_id"))){
|
|
|
|
|
+ //营运经理
|
|
|
|
|
+ String yyjl = e.get("employeeField_lrpswhaj_id").toString();
|
|
|
|
|
+ JSONArray yyjlArray = JSONArray.parseArray(yyjl);
|
|
|
|
|
+ dataMap.put("employeeField_mfo3dvq2",yyjlArray.get(0));
|
|
|
|
|
+ }
|
|
|
|
|
+ List<Map> sonList = ydService.queryDetails(YDParam.builder().
|
|
|
|
|
+ appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
|
|
+ .formInstanceId(e.get("formInstanceId").toString())
|
|
|
|
|
+ .formUuid("FORM-97BA6C6C8C50416A9E5854F2F4B5C3F3R4WC")
|
|
|
|
|
+ .tableFieldId("tableField_lrru2tnq")
|
|
|
|
|
+ .build());
|
|
|
|
|
+ //项目点档案子表本月
|
|
|
|
|
+ List<Map> sonFilterList = sonList.stream().filter(m -> formatNowMonth.equals(m.get("textField_luh0k82j"))).collect(Collectors.toList());
|
|
|
|
|
+ sonFilterList.forEach(s->{
|
|
|
|
|
+ //人工定额
|
|
|
|
|
+ double person = Double.parseDouble(ObjectUtil.isNotNull(s.get("numberField_lrru2tnt_value")) && !s.get("numberField_lrru2tnt_value").toString().isEmpty() ? s.get("numberField_lrru2tnt_value").toString() : "0.0");
|
|
|
|
|
+ //物料定额
|
|
|
|
|
+ double cost = Double.parseDouble(ObjectUtil.isNotNull(s.get("numberField_lrru2tnu_value")) && !s.get("numberField_lrru2tnu_value").toString().isEmpty() ? s.get("numberField_lrru2tnu_value").toString() : "0.0");
|
|
|
|
|
+ //收入定额
|
|
|
|
|
+ double income = Double.parseDouble(ObjectUtil.isNotNull(s.get("numberField_lrru2tns_value")) && !s.get("numberField_lrru2tns_value").toString().isEmpty() ? s.get("numberField_lrru2tns_value").toString() : "0.0");
|
|
|
|
|
+ //回款金额
|
|
|
|
|
+ double back = Double.parseDouble(ObjectUtil.isNotNull(s.get("numberField_lrru2to3_value")) && !s.get("numberField_lrru2to3_value").toString().isEmpty() ? s.get("numberField_lrru2to3_value").toString() : "0.0");
|
|
|
|
|
+ //工资定额分项
|
|
|
|
|
+ dataMap.put("numberField_mfenmehp",person);
|
|
|
|
|
+ //物料定额
|
|
|
|
|
+ dataMap.put("numberField_mfenmeih",cost);
|
|
|
|
|
+ //定额收入
|
|
|
|
|
+ dataMap.put("numberField_mfenmejp",income);
|
|
|
|
|
+ //回款金额
|
|
|
|
|
+ dataMap.put("numberField_mfenmek8",back);
|
|
|
|
|
+ });
|
|
|
|
|
+ //项目点档案子表上月
|
|
|
|
|
+ List<Map> sonLastMonthList = sonList.stream().filter(m -> formatLastMonth.equals(m.get("tableField_lrru2tnq"))).collect(Collectors.toList());
|
|
|
|
|
+ sonLastMonthList.forEach(s->{
|
|
|
|
|
+ //开票金额
|
|
|
|
|
+ double open = Double.parseDouble(ObjectUtil.isNotNull(s.get("numberField_lrru2to2_value")) && !s.get("numberField_lrru2to2_value").toString().isEmpty() ? s.get("numberField_lrru2to2_value").toString() : "0.0");
|
|
|
|
|
+ //开票金额
|
|
|
|
|
+ dataMap.put("numberField_mfenmejr",open);
|
|
|
|
|
+ });
|
|
|
|
|
+ //算薪结果表
|
|
|
|
|
+ salarys.forEach((k,v)->{
|
|
|
|
|
+ if (k.equals(name)){
|
|
|
|
|
+ dataMap.putAll(v);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ //遍历部门成本
|
|
|
|
|
+ costCollect.forEach((k0,v0)->{
|
|
|
|
|
+ if (k0.equals(name)){
|
|
|
|
|
+ v0.forEach((k1,v1)->{
|
|
|
|
|
+ if ("生产成本-业务外包费".equals(k1)){
|
|
|
|
|
+ //劳务所临时工费用
|
|
|
|
|
+ dataMap.put("numberField_mfenmei2",v1);
|
|
|
|
|
+ }else if ("生产成本-租赁费".equals(k1)){
|
|
|
|
|
+ //租赁
|
|
|
|
|
+ dataMap.put("numberField_mfenmeil",v1);
|
|
|
|
|
+ }else if ("生产成本-折旧".equals(k1)) {
|
|
|
|
|
+ //折旧
|
|
|
|
|
+ dataMap.put("numberField_mfenmeio", v1);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ //劳防用品
|
|
|
|
|
+ workCloCost.forEach((k,v)->{
|
|
|
|
|
+ if (k.equals(name)){
|
|
|
|
|
+ dataMap.put("numberField_mfenmeim",v);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ //物耗(非工作服)
|
|
|
|
|
+ workNoCloCost.forEach((k,v)->{
|
|
|
|
|
+ if (k.equals(name)){
|
|
|
|
|
+ dataMap.put("numberField_mfenmeii",v.get("cost"));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ //设备维修
|
|
|
|
|
+ repairBillCost.forEach((k,v)->{
|
|
|
|
|
+ if (k.equals(code)){
|
|
|
|
|
+ dataMap.put("numberField_mfenmeij",v.get("cost"));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ double bzwhcb = Double.parseDouble(ObjectUtil.isNotNull(e.get("numberField_lrn2oy4q_value")) && !e.get("numberField_lrn2oy4q_value").toString().isEmpty() ? e.get("numberField_lrn2oy4q_value").toString() : "0.0");
|
|
|
|
|
+ if (bzwhcb == 0){
|
|
|
|
|
+ dataMap.put("numberField_mfenmekv",3);
|
|
|
|
|
+ dataMap.put("numberField_mfenmel9",2);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //上月小业主开票
|
|
|
|
|
+ lastOpens.forEach((k,v)->{
|
|
|
|
|
+ if (k.equals(name)){
|
|
|
|
|
+ dataMap.put("numberField_mfenmelh",v.get("open"));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ //上上月小业主开票
|
|
|
|
|
+ lastLastOpens.forEach((k,v)->{
|
|
|
|
|
+ if (k.equals(name)){
|
|
|
|
|
+ dataMap.put("numberField_mfenmelg",v.get("open"));
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //公式字段计算
|
|
|
|
|
+ //定额工资
|
|
|
|
|
+ dataMap.put("numberField_mfenmehw", UtilMap.getDouble(dataMap,"numberField_mfenmehw")
|
|
|
|
|
+ + UtilMap.getDouble(dataMap,"numberField_mfenmehp"));
|
|
|
|
|
+ //调整后应发工资
|
|
|
|
|
+ dataMap.put("numberField_mfenmei5", UtilMap.getDouble(dataMap,"numberField_mfenmei5")
|
|
|
|
|
+ + UtilMap.getDouble(dataMap,"numberField_mfenmei2"));
|
|
|
|
|
+ //人工结余
|
|
|
|
|
+ dataMap.put("numberField_mfenmei6", UtilMap.getDouble(dataMap,"numberField_mfenmehw")
|
|
|
|
|
+ - UtilMap.getDouble(dataMap,"numberField_mfenmei5"));
|
|
|
|
|
+ //人工占比
|
|
|
|
|
+ double fm = UtilMap.getDouble(dataMap,"numberField_mfenmejr")
|
|
|
|
|
+ + UtilMap.getDouble(dataMap,"numberField_mfenmelh");
|
|
|
|
|
+ if (fm == 0){
|
|
|
|
|
+ dataMap.put("numberField_mfenmei4",0);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ dataMap.put("numberField_mfenmei4", (UtilMap.getDouble(dataMap,"rgzbfz")
|
|
|
|
|
+ + UtilMap.getDouble(dataMap,"numberField_mfenmei2")) / fm * 100);
|
|
|
|
|
+ }
|
|
|
|
|
+ //结余比例
|
|
|
|
|
+ if (UtilMap.getDouble(dataMap,"numberField_mfenmehw") == 0){
|
|
|
|
|
+ dataMap.put("numberField_mfenmei7",0);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ dataMap.put("numberField_mfenmei7", UtilMap.getDouble(dataMap,"numberField_mfenmei6")
|
|
|
|
|
+ / UtilMap.getDouble(dataMap,"numberField_mfenmehw") * 100);
|
|
|
|
|
+ }
|
|
|
|
|
+ //实际费用 (工作服 非工作服 生产成本-租赁费 生产成本-折旧 设备维修)
|
|
|
|
|
+ dataMap.put("numberField_mfenmeip",UtilMap.getDouble(dataMap,"numberField_mfenmeim")
|
|
|
|
|
+ + UtilMap.getDouble(dataMap,"numberField_mfenmeii")
|
|
|
|
|
+ + UtilMap.getDouble(dataMap,"numberField_mfenmeil")
|
|
|
|
|
+ + UtilMap.getDouble(dataMap,"numberField_mfenmeio")
|
|
|
|
|
+ + UtilMap.getDouble(dataMap,"numberField_mfenmeij"));
|
|
|
|
|
+ //物耗占比
|
|
|
|
|
+ if (UtilMap.getDouble(dataMap,"numberField_mfenmejr") == 0){
|
|
|
|
|
+ dataMap.put("numberField_mfenmeir",0);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ dataMap.put("numberField_mfenmeir", UtilMap.getDouble(dataMap,"numberField_mfenmeii")
|
|
|
|
|
+ / UtilMap.getDouble(dataMap,"numberField_mfenmejr") * 100);
|
|
|
|
|
+ }
|
|
|
|
|
+ //物料结余
|
|
|
|
|
+ dataMap.put("numberField_mfenmeis", UtilMap.getDouble(dataMap,"numberField_mfenmeih")
|
|
|
|
|
+ - UtilMap.getDouble(dataMap,"numberField_mfenmeii"));
|
|
|
|
|
+ //结余比例
|
|
|
|
|
+ if (UtilMap.getDouble(dataMap,"numberField_mfenmeih") == 0){
|
|
|
|
|
+ dataMap.put("numberField_mfenmeit",0);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ dataMap.put("numberField_mfenmeit", UtilMap.getDouble(dataMap,"numberField_mfenmeis")
|
|
|
|
|
+ / UtilMap.getDouble(dataMap,"numberField_mfenmeih") * 100);
|
|
|
|
|
+ }
|
|
|
|
|
+ //结算金额-差额
|
|
|
|
|
+ dataMap.put("numberField_mfenmejs", UtilMap.getDouble(dataMap,"numberField_mfenmejr")
|
|
|
|
|
+ - UtilMap.getDouble(dataMap,"numberField_mfenmejp"));
|
|
|
|
|
+ //开票状态
|
|
|
|
|
+ if (ObjectUtil.isNotNull(dataMap.get("numberField_mfenmejr")) && Double.parseDouble(dataMap.get("numberField_mfenmejr").toString()) > 0){
|
|
|
|
|
+ dataMap.put("radioField_mfenmek0","已开票");
|
|
|
|
|
+ }else {
|
|
|
|
|
+ dataMap.put("radioField_mfenmek0","未开票");
|
|
|
|
|
+ }
|
|
|
|
|
+ //增长金额
|
|
|
|
|
+ dataMap.put("numberField_mfenmeli", UtilMap.getDouble(dataMap,"numberField_mfenmelh")
|
|
|
|
|
+ - UtilMap.getDouble(dataMap,"numberField_mfenmelg"));
|
|
|
|
|
+ //增长率
|
|
|
|
|
+ if (UtilMap.getDouble(dataMap,"numberField_mfenmelg") == 0 && UtilMap.getDouble(dataMap,"numberField_mfenmelh") >= 500){
|
|
|
|
|
+ dataMap.put("numberField_mfenmelj",100);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ dataMap.put("numberField_mfenmelj", UtilMap.getDouble(dataMap,"numberField_mfenmeli")
|
|
|
|
|
+ / UtilMap.getDouble(dataMap,"numberField_mfenmelg"));
|
|
|
|
|
+ }
|
|
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
|
|
+ .appType("APP_TKO2FYGFQYQQMQFUTUU5")
|
|
|
|
|
+ .systemToken("2IF66SC1XCSY45IUBXA0X9WYE09G3W8GGNEFM7T4")
|
|
|
|
|
+ .formUuid("FORM-C17DA3AEA3064A3D9CA118BBB3116BF6NLUB")
|
|
|
|
|
+ .searchCondition(JSON.toJSONString(UtilMap.map("dateField_mfo3dvpr, textField_mfenmegp", dateList, code)))
|
|
|
|
|
+ .formDataJson(JSON.toJSONString(dataMap))
|
|
|
|
|
+ .useLatestVersion(true)
|
|
|
|
|
+ .build(), YDConf.FORM_OPERATION.upsert);
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|