费用报销优化

This commit is contained in:
itzhang 2025-08-25 21:27:26 +08:00
parent 2e7d7c76aa
commit 5129217e29

View File

@ -1,6 +1,7 @@
package com.management.controller; package com.management.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.management.constant.ERPURLConstant; import com.management.constant.ERPURLConstant;
import com.management.constant.URLConstant; import com.management.constant.URLConstant;
@ -50,7 +51,7 @@ public class ReimbursementController {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
log.info("当前时间:{}", now); log.info("当前时间:{}", now);
//获取两天前的时间 //获取两天前的时间
LocalDateTime twoDaysAgo = now.minusDays(1); LocalDateTime twoDaysAgo = now.minusDays(2);
//将时间转换样式 //将时间转换样式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@ -65,7 +66,7 @@ public class ReimbursementController {
Map expensesMap = new HashMap<>(); Map expensesMap = new HashMap<>();
expensesMap.put("data", data); expensesMap.put("data", data);
expensesMap.put("pageNo", 1); expensesMap.put("pageNo", 1);
expensesMap.put("pageSize", 1999); expensesMap.put("pageSize", 2000);
//开始获取金蝶token //开始获取金蝶token
String accessToken = new KDTokenController().getKDAccessTokenTest(); String accessToken = new KDTokenController().getKDAccessTokenTest();
@ -256,6 +257,8 @@ public class ReimbursementController {
if ("success".equals(projectRes.getString("errorDescription")) && !projectRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { if ("success".equals(projectRes.getString("errorDescription")) && !projectRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject projectData = projectRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); JSONObject projectData = projectRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
expensesDetailMap.put("project_id", projectData.getString("_id")); expensesDetailMap.put("project_id", projectData.getString("_id"));
expensesDetailMap.put("current_project_status__c", projectData.getString("project_status__c") != null ? projectData.getString("project_status__c") : "");
} }
} }
@ -265,9 +268,31 @@ public class ReimbursementController {
expensesDetailMap.put("amount", expensesDetailData.getBigDecimal("expenseamount"));//金额价税合计 expensesDetailMap.put("amount", expensesDetailData.getBigDecimal("expenseamount"));//金额价税合计
expensesDetailMap.put("erp_row_id__c", expensesDetailData.getString("entryId"));//ERP行ID expensesDetailMap.put("erp_row_id__c", expensesDetailData.getString("entryId"));//ERP行ID
//费用项目
String costItemStr = expensesDetailData.getString("expenseitem_number") != null ? expensesDetailData.getString("expenseitem_number") : "";
JSONObject getCostItem = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "field_2wvmq__c", Arrays.asList(costItemStr)),
new Filter("EQ", "life_status", Arrays.asList("normal"))
), "object_o8291__c");
JSONObject costItemRes = new JSONObject();
try {
costItemRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getCostItem, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(costItemRes.getString("errorDescription")) && !costItemRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject costItemData = costItemRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
expensesDetailMap.put("field_3xCHY__c", costItemData.getString("_id"));
}
//开始根据ERP行ID判断是否已经集成过该单据 //开始根据ERP行ID判断是否已经集成过该单据
JSONObject getExpensesDetail = crmRequestUtil.getCRMList(Arrays.asList( JSONObject getExpensesDetail = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "_id", Arrays.asList(expensesDetailData.getString("entryId"))) new Filter("EQ", "erp_row_id__c", Arrays.asList(expensesDetailData.getString("entryId")))
), "ExpenseClaimFormDetailObj"); ), "ExpenseClaimFormDetailObj");
JSONObject expensesDetailCRMRes = new JSONObject(); JSONObject expensesDetailCRMRes = new JSONObject();
@ -356,7 +381,7 @@ public class ReimbursementController {
* @return void * @return void
* @Author weiloong_zhang * @Author weiloong_zhang
*/ */
@PostMapping @PostMapping("/sync/public")
public void syncPublicExpenses() { public void syncPublicExpenses() {
CrmRequestUtil crmRequestUtil = new CrmRequestUtil(); CrmRequestUtil crmRequestUtil = new CrmRequestUtil();
@ -366,7 +391,7 @@ public class ReimbursementController {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
log.info("当前时间:{}", now); log.info("当前时间:{}", now);
//获取两天前的时间 //获取两天前的时间
LocalDateTime twoDaysAgo = now.minusDays(3); LocalDateTime twoDaysAgo = now.minusDays(2);
//将时间转换样式 //将时间转换样式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@ -381,7 +406,7 @@ public class ReimbursementController {
Map expensesMap = new HashMap<>(); Map expensesMap = new HashMap<>();
expensesMap.put("data", data); expensesMap.put("data", data);
expensesMap.put("pageNo", 1); expensesMap.put("pageNo", 1);
expensesMap.put("pageSize", 1999); expensesMap.put("pageSize", 2000);
//开始获取金蝶token //开始获取金蝶token
String accessToken = new KDTokenController().getKDAccessTokenTest(); String accessToken = new KDTokenController().getKDAccessTokenTest();
@ -488,8 +513,6 @@ public class ReimbursementController {
continue; continue;
} }
System.out.println("负责人数据为:" + ownerRes);
//开始截取负责人user_id //开始截取负责人user_id
String ownerUserId = ownerRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0).getString("user_id"); String ownerUserId = ownerRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0).getString("user_id");
expensesMainReq.put("owner", Arrays.asList(ownerUserId)); expensesMainReq.put("owner", Arrays.asList(ownerUserId));
@ -506,7 +529,7 @@ public class ReimbursementController {
JSONObject expensesCRMRes = new JSONObject(); JSONObject expensesCRMRes = new JSONObject();
try { try {
expensesCRMRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, getExpenses, JSONObject.class); expensesCRMRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getExpenses, JSONObject.class);
} catch (RestClientException e) { } catch (RestClientException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -567,15 +590,38 @@ public class ReimbursementController {
if ("success".equals(projectRes.getString("errorDescription")) && !projectRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { if ("success".equals(projectRes.getString("errorDescription")) && !projectRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject projectData = projectRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); JSONObject projectData = projectRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
expensesDetail.put("project_id", projectData.getString("_id")); expensesDetail.put("project_id", projectData.getString("_id"));
expensesDetail.put("current_project_status__c", projectData.getString("project_status__c") != null ? projectData.getString("project_status__c") : "");
} }
} }
expensesDetail.put("amount", expenseDetailData.getBigDecimal("expenseamount"));//金额价税合计 expensesDetail.put("amount", expenseDetailData.getBigDecimal("expenseamount"));//金额价税合计
expensesDetail.put("erp_row_id__c", expenseDetailData.getString("entryId"));//ERP行ID expensesDetail.put("erp_row_id__c", expenseDetailData.getString("entryId"));//ERP行ID
//费用项目
String costItemStr = expenseDetailData.getString("expenseitem_number") != null ? expenseDetailData.getString("expenseitem_number") : "";
JSONObject getCostItem = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "field_2wvmq__c", Arrays.asList(costItemStr)),
new Filter("EQ", "life_status", Arrays.asList("normal"))
), "object_o8291__c");
JSONObject costItemRes = new JSONObject();
try {
costItemRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getCostItem, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(costItemRes.getString("errorDescription")) && !costItemRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject costItemData = costItemRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
expensesDetail.put("field_3xCHY__c", costItemData.getString("_id"));
}
//开始根据ERP行ID判断是否已经集成过该单据 //开始根据ERP行ID判断是否已经集成过该单据
JSONObject getExpensesDetail = crmRequestUtil.getCRMList(Arrays.asList( JSONObject getExpensesDetail = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "_id", Arrays.asList(expenseDetailData.getString("entryId"))) new Filter("EQ", "erp_row_id__c", Arrays.asList(expenseDetailData.getString("entryId")))
), "ExpenseClaimFormDetailObj"); ), "ExpenseClaimFormDetailObj");
JSONObject expensesDetailCRMRes = new JSONObject(); JSONObject expensesDetailCRMRes = new JSONObject();
@ -672,7 +718,7 @@ public class ReimbursementController {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
log.info("当前时间:{}", now); log.info("当前时间:{}", now);
//获取两天前的时间 //获取两天前的时间
LocalDateTime twoDaysAgo = now.minusDays(5); LocalDateTime twoDaysAgo = now.minusDays(2);
//将时间转换样式 //将时间转换样式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@ -687,7 +733,7 @@ public class ReimbursementController {
Map expensesMap = new HashMap<>(); Map expensesMap = new HashMap<>();
expensesMap.put("data", data); expensesMap.put("data", data);
expensesMap.put("pageNo", 1); expensesMap.put("pageNo", 1);
expensesMap.put("pageSize", 1999); expensesMap.put("pageSize", 2000);
//开始获取金蝶token //开始获取金蝶token
String accessToken = new KDTokenController().getKDAccessTokenTest(); String accessToken = new KDTokenController().getKDAccessTokenTest();
@ -716,8 +762,6 @@ public class ReimbursementController {
JSONObject expensesRes = JSON.parseObject(expensesResStr); JSONObject expensesRes = JSON.parseObject(expensesResStr);
System.out.println(expensesRes);
if (!"0".equals(expensesRes.getString("errorCode")) || expensesRes.getJSONObject("data").getJSONArray("rows").isEmpty()) { if (!"0".equals(expensesRes.getString("errorCode")) || expensesRes.getJSONObject("data").getJSONArray("rows").isEmpty()) {
log.info("金蝶查询差旅报销单失败或者没有符合条件数据"); log.info("金蝶查询差旅报销单失败或者没有符合条件数据");
return; return;
@ -872,6 +916,7 @@ public class ReimbursementController {
if ("success".equals(projectRes.getString("errorDescription")) && !projectRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { if ("success".equals(projectRes.getString("errorDescription")) && !projectRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject projectData = projectRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); JSONObject projectData = projectRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
expensesDetailMap.put("project_id", projectData.getString("_id")); expensesDetailMap.put("project_id", projectData.getString("_id"));
expensesDetailMap.put("current_project_status__c", projectData.getString("project_status__c") != null ? projectData.getString("project_status__c") : "");
} }
} }
@ -881,9 +926,31 @@ public class ReimbursementController {
expensesDetailMap.put("amount", expensesDetailData.getBigDecimal("triporiamount"));//金额价税合计 expensesDetailMap.put("amount", expensesDetailData.getBigDecimal("triporiamount"));//金额价税合计
expensesDetailMap.put("erp_row_id__c", expensesDetailData.getString("id"));//ERP行ID expensesDetailMap.put("erp_row_id__c", expensesDetailData.getString("id"));//ERP行ID
//费用项目
String costItemStr = expensesDetailData.getString("tripexpenseitem_number") != null ? expensesDetailData.getString("tripexpenseitem_number") : "";
JSONObject getCostItem = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "field_2wvmq__c", Arrays.asList(costItemStr)),
new Filter("EQ", "life_status", Arrays.asList("normal"))
), "object_o8291__c");
JSONObject costItemRes = new JSONObject();
try {
costItemRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getCostItem, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(costItemRes.getString("errorDescription")) && !costItemRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject costItemData = costItemRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
expensesDetailMap.put("field_3xCHY__c", costItemData.getString("_id"));
}
//开始根据ERP行ID判断是否已经集成过该单据 //开始根据ERP行ID判断是否已经集成过该单据
JSONObject getExpensesDetail = crmRequestUtil.getCRMList(Arrays.asList( JSONObject getExpensesDetail = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "_id", Arrays.asList(expensesDetailData.getString("id"))) new Filter("EQ", "erp_row_id__c", Arrays.asList(expensesDetailData.getString("id")))
), "ExpenseClaimFormDetailObj"); ), "ExpenseClaimFormDetailObj");
JSONObject expensesDetailCRMRes = new JSONObject(); JSONObject expensesDetailCRMRes = new JSONObject();