|
@@ -5,13 +5,10 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.fasterxml.jackson.core.JacksonException;
|
|
import com.fasterxml.jackson.core.JacksonException;
|
|
|
-import com.fasterxml.jackson.core.JsonParser;
|
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
-import com.malk.fenggefushi.entity.Order;
|
|
|
|
|
import com.malk.fenggefushi.service.HeiHuOrderService;
|
|
import com.malk.fenggefushi.service.HeiHuOrderService;
|
|
|
-import com.malk.fenggefushi.test.test;
|
|
|
|
|
import com.malk.server.aliwork.YDConf;
|
|
import com.malk.server.aliwork.YDConf;
|
|
|
import com.malk.server.aliwork.YDParam;
|
|
import com.malk.server.aliwork.YDParam;
|
|
|
import com.malk.server.aliwork.YDSearch;
|
|
import com.malk.server.aliwork.YDSearch;
|
|
@@ -23,7 +20,6 @@ import com.malk.utils.UtilHttp;
|
|
|
import com.malk.utils.UtilMap;
|
|
import com.malk.utils.UtilMap;
|
|
|
import lombok.SneakyThrows;
|
|
import lombok.SneakyThrows;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.checkerframework.checker.fenum.qual.SwingBoxOrientation;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
@@ -32,7 +28,6 @@ import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
import java.time.ZoneId;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
|
-import java.time.temporal.ChronoUnit;
|
|
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
@@ -432,8 +427,8 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
row.put("textField_mhsj6gtq",productDescription);//todo:产品描述
|
|
row.put("textField_mhsj6gtq",productDescription);//todo:产品描述
|
|
|
JSONArray array1 = detail.getJSONArray("customFieldValues");
|
|
JSONArray array1 = detail.getJSONArray("customFieldValues");
|
|
|
color = array1.stream()
|
|
color = array1.stream()
|
|
|
- .map(obj -> (JSONObject) obj)
|
|
|
|
|
- .filter(item -> item.getIntValue("fieldId") == 82259)
|
|
|
|
|
|
|
+ .map(obj -> (JSONObject) obj)
|
|
|
|
|
+ .filter(item -> item.getIntValue("fieldId") == 82259)
|
|
|
.map(item -> item.getString("value"))
|
|
.map(item -> item.getString("value"))
|
|
|
.findFirst()
|
|
.findFirst()
|
|
|
.orElse(null);
|
|
.orElse(null);
|
|
@@ -1002,76 +997,47 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
return colorValue;
|
|
return colorValue;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @SneakyThrows
|
|
|
@Override
|
|
@Override
|
|
|
- public McR purchaseSchedule() throws JacksonException {
|
|
|
|
|
|
|
+ public McR purchaseSchedule(List<Map<String, Object>> dataList) {
|
|
|
HashMap header = new HashMap();
|
|
HashMap header = new HashMap();
|
|
|
header.put("X-AUTH", HeiHuAccessToken().getData().toString());
|
|
header.put("X-AUTH", HeiHuAccessToken().getData().toString());
|
|
|
header.put("Content-Type", "application/json");
|
|
header.put("Content-Type", "application/json");
|
|
|
String targetValue = "合同确认,提交审批";
|
|
String targetValue = "合同确认,提交审批";
|
|
|
-// String targetValue1 = "合同修改,修改审批";
|
|
|
|
|
- Map<String, List<String>> purchaserOrderCodes = new HashMap<>();
|
|
|
|
|
-
|
|
|
|
|
- int pageNum = 1;
|
|
|
|
|
- int pageSize = 100;
|
|
|
|
|
- boolean hasMoreData = true;
|
|
|
|
|
|
|
+ String targetValueUpdate = "合同修改,修改审批";
|
|
|
|
|
|
|
|
- while (hasMoreData) {
|
|
|
|
|
- HashMap body = new HashMap();
|
|
|
|
|
- Map<String, Integer> page = new HashMap<>();
|
|
|
|
|
- page.put("pageNum", pageNum);
|
|
|
|
|
- page.put("pageSize", pageSize);
|
|
|
|
|
- List<Integer> status = Arrays.asList(1);
|
|
|
|
|
- body.put("page", page);
|
|
|
|
|
- body.put("status", status);
|
|
|
|
|
-
|
|
|
|
|
- String doPost = UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/purchaseOrder/queryList2", header, null, body);//查询采购订单
|
|
|
|
|
|
|
+ // 定义一个字符串集合,默认包含两个值:"默认值1"、"默认值2"
|
|
|
|
|
+ List<String> targetValues = new ArrayList() {{
|
|
|
|
|
+ add("合同确认,提交审批");
|
|
|
|
|
+ add("合同修改,修改审批");
|
|
|
|
|
+ }};
|
|
|
|
|
+ Map<String, List<String>> purchaserOrderCodes = new HashMap<>();
|
|
|
|
|
|
|
|
- ObjectMapper mapper = new ObjectMapper();
|
|
|
|
|
- Map<String, Object> response = mapper.readValue(doPost, Map.class);
|
|
|
|
|
|
|
|
|
|
- if (!"01000000".equals(response.get("code"))) {
|
|
|
|
|
- System.out.println("请求失败: " + response.get("msg"));
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- List<Map<String, Object>> dataList = (List<Map<String, Object>>) response.get("data");
|
|
|
|
|
- if (dataList != null) {
|
|
|
|
|
- for (Map<String, Object> item : dataList) {
|
|
|
|
|
- String purchaserName = (String) item.get("purchaserName");
|
|
|
|
|
- if (purchaserName == null) purchaserName = "未知";
|
|
|
|
|
-
|
|
|
|
|
- boolean hasTargetStatus = false;
|
|
|
|
|
- List<Map<String, Object>> customFieldValues = (List<Map<String, Object>>) item.get("customFieldValues");
|
|
|
|
|
- if (customFieldValues != null) {
|
|
|
|
|
- for (Map<String, Object> field : customFieldValues) {
|
|
|
|
|
-// if (targetValue.equals(field.get("value") ) || targetValue1.equals(field.get("value"))) {
|
|
|
|
|
- if (targetValue.equals(field.get("value"))) {
|
|
|
|
|
- hasTargetStatus = true;
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ if (ObjectUtil.isNotNull(dataList) && dataList.size() > 0) {
|
|
|
|
|
+ for (Map<String, Object> item : dataList) {
|
|
|
|
|
+ String purchaserName = (String) item.get("purchaserName");
|
|
|
|
|
+ if (purchaserName == null) purchaserName = "未知";
|
|
|
|
|
+
|
|
|
|
|
+// boolean hasTargetStatus = false;
|
|
|
|
|
+ List<Map<String, Object>> customFieldValues = (List<Map<String, Object>>) item.get("customFieldValues");
|
|
|
|
|
+ if (customFieldValues != null) {
|
|
|
|
|
+ for (Map<String, Object> field : customFieldValues) {
|
|
|
|
|
+ if (targetValue.equals(field.get("value") ) || targetValueUpdate.equals(field.get("value"))) {
|
|
|
|
|
+ System.out.println("合同状态类型:"+field.get("value"));
|
|
|
|
|
+// if (targetValue.equals(field.get("value"))) {
|
|
|
|
|
+// hasTargetStatus = true;
|
|
|
|
|
+ String orderCode = (String) item.get("orderCode");
|
|
|
|
|
+ if (orderCode != null) {
|
|
|
|
|
+ purchaserOrderCodes.computeIfAbsent(purchaserName + "-" + field.get("value"), k -> new ArrayList<>()).add(orderCode);
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if (hasTargetStatus) {
|
|
|
|
|
- String orderCode = (String) item.get("orderCode");
|
|
|
|
|
- if (orderCode != null) {
|
|
|
|
|
- purchaserOrderCodes.computeIfAbsent(purchaserName, k -> new ArrayList<>()).add(orderCode);
|
|
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- hasMoreData = dataList.size() >= pageSize;
|
|
|
|
|
- } else {
|
|
|
|
|
- hasMoreData = false;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- pageNum++;
|
|
|
|
|
-
|
|
|
|
|
- try {
|
|
|
|
|
- Thread.sleep(200);
|
|
|
|
|
- } catch (InterruptedException e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 输出所有采购员的待审批订单
|
|
// 输出所有采购员的待审批订单
|
|
@@ -1089,19 +1055,20 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
|
|
|
|
|
// 输出每个采购员的情况
|
|
// 输出每个采购员的情况
|
|
|
for (Map.Entry<String, List<String>> entry : purchaserOrderCodes.entrySet()) {
|
|
for (Map.Entry<String, List<String>> entry : purchaserOrderCodes.entrySet()) {
|
|
|
- String purchaserName = entry.getKey();
|
|
|
|
|
|
|
+ String[] split = entry.getKey().split("-");
|
|
|
|
|
+ String purchaserName = split[0];
|
|
|
|
|
+ String type = split[1];
|
|
|
List<String> orderCodes = entry.getValue();
|
|
List<String> orderCodes = entry.getValue();
|
|
|
int orderCount = orderCodes.size();
|
|
int orderCount = orderCodes.size();
|
|
|
|
|
|
|
|
System.out.println("采购员: " + purchaserName);
|
|
System.out.println("采购员: " + purchaserName);
|
|
|
System.out.println("待审批订单数量: " + orderCount);
|
|
System.out.println("待审批订单数量: " + orderCount);
|
|
|
|
|
+ System.out.println("审批类型: " + type);
|
|
|
|
|
|
|
|
if (orderCount > 1) {
|
|
if (orderCount > 1) {
|
|
|
System.out.println("⚠️ 注意:该采购员有 " + orderCount + " 个待审批订单");
|
|
System.out.println("⚠️ 注意:该采购员有 " + orderCount + " 个待审批订单");
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
System.out.println("订单编号: " + String.join(", ", orderCodes));
|
|
System.out.println("订单编号: " + String.join(", ", orderCodes));
|
|
|
- System.out.println();
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 按订单数量排序输出
|
|
// 按订单数量排序输出
|
|
@@ -1109,8 +1076,11 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
purchaserOrderCodes.entrySet().stream()
|
|
purchaserOrderCodes.entrySet().stream()
|
|
|
.sorted((e1, e2) -> Integer.compare(e2.getValue().size(), e1.getValue().size()))
|
|
.sorted((e1, e2) -> Integer.compare(e2.getValue().size(), e1.getValue().size()))
|
|
|
.forEach(entry -> {
|
|
.forEach(entry -> {
|
|
|
- String purchaserName = entry.getKey();
|
|
|
|
|
|
|
+ String[] split = entry.getKey().split("-");
|
|
|
|
|
+ String purchaserName = split[0];
|
|
|
|
|
+ String type = split[1];
|
|
|
List<String> orderCodes = entry.getValue();
|
|
List<String> orderCodes = entry.getValue();
|
|
|
|
|
+
|
|
|
System.out.println(purchaserName + " (" + orderCodes.size() + "个): " +
|
|
System.out.println(purchaserName + " (" + orderCodes.size() + "个): " +
|
|
|
String.join(", ", orderCodes));
|
|
String.join(", ", orderCodes));
|
|
|
|
|
|
|
@@ -1128,13 +1098,16 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
|
|
|
|
|
// ========== 修改点2:为每个订单创建临时存储列表 ==========
|
|
// ========== 修改点2:为每个订单创建临时存储列表 ==========
|
|
|
// 用于暂存每个订单的明细数据,等计算出毛利率后再决定添加到哪个列表
|
|
// 用于暂存每个订单的明细数据,等计算出毛利率后再决定添加到哪个列表
|
|
|
- Map<String, List<Map<String, String>>> tempOrderDataMap = new HashMap<>();
|
|
|
|
|
|
|
+// Map<String, List<Map<String, String>>> tempOrderDataMap = new HashMap<>();
|
|
|
// 用于存储每个订单的汇总数据,用于计算毛利率
|
|
// 用于存储每个订单的汇总数据,用于计算毛利率
|
|
|
- Map<String, Map<String, Double>> orderSummaryForMlv = new HashMap<>();
|
|
|
|
|
|
|
+// Map<String, Map<String, Double>> orderSummaryForMlv = new HashMap<>();
|
|
|
|
|
+ List<String> oldIds = new ArrayList<>();
|
|
|
|
|
|
|
|
for (String orderCode : orderCodes) {
|
|
for (String orderCode : orderCodes) {
|
|
|
System.out.println("正在处理订单: " + orderCode);
|
|
System.out.println("正在处理订单: " + orderCode);
|
|
|
-
|
|
|
|
|
|
|
+ if (type.equals(targetValueUpdate)){
|
|
|
|
|
+ oldIds.add(orderCode);
|
|
|
|
|
+ }
|
|
|
// ========== 修改点3:为当前订单创建临时数据存储 ==========
|
|
// ========== 修改点3:为当前订单创建临时数据存储 ==========
|
|
|
List<Map<String, String>> currentOrderRows = new ArrayList<>();
|
|
List<Map<String, String>> currentOrderRows = new ArrayList<>();
|
|
|
double orderTotalSalesAmount = 0.0;
|
|
double orderTotalSalesAmount = 0.0;
|
|
@@ -1180,6 +1153,8 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
body_A.put("orderNo",orderNumber);
|
|
body_A.put("orderNo",orderNumber);
|
|
|
String jsonString2 = UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/saleOrder/queryList2", header, null, body_A);//todo:查询销售订单,获取客户、订单号、款号、产品描述、颜色、数量、销售单价、销售金额、币别
|
|
String jsonString2 = UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/saleOrder/queryList2", header, null, body_A);//todo:查询销售订单,获取客户、订单号、款号、产品描述、颜色、数量、销售单价、销售金额、币别
|
|
|
JSONArray array = JSONObject.parseObject(jsonString2).getJSONArray("data");//主表数据
|
|
JSONArray array = JSONObject.parseObject(jsonString2).getJSONArray("data");//主表数据
|
|
|
|
|
+
|
|
|
|
|
+ boolean isSample = false;//销售订单若为样品订单则不发起钉钉流程
|
|
|
for(int i=0;i<array.size();i++){
|
|
for(int i=0;i<array.size();i++){
|
|
|
JSONObject data = array.getJSONObject(i);
|
|
JSONObject data = array.getJSONObject(i);
|
|
|
customerName = data.getString("customerCode");//客户
|
|
customerName = data.getString("customerCode");//客户
|
|
@@ -1199,126 +1174,188 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
JsonNode valueNode = field.get("value");
|
|
JsonNode valueNode = field.get("value");
|
|
|
if(valueNode != null){
|
|
if(valueNode != null){
|
|
|
estimatedPrice = valueNode.asDouble();//辅料预估单价
|
|
estimatedPrice = valueNode.asDouble();//辅料预估单价
|
|
|
- break;
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(fieldIdNode != null && fieldIdNode.asInt() == 47771){
|
|
|
|
|
+ JsonNode valueNode = field.get("value");
|
|
|
|
|
+ if("样品订单".equals(valueNode.asText())){
|
|
|
|
|
+ isSample = true;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- JSONArray products_A = JSONObject.parseObject(jsonString2).getJSONArray("data").getJSONObject(0).getJSONArray("saleManageOrderDetailRowApiVOList");//销售订单明细数据
|
|
|
|
|
-
|
|
|
|
|
- if(products_A != null) {
|
|
|
|
|
- for (int i = 0; i < products_A.size(); i++) {
|
|
|
|
|
- JSONObject detail = products_A.getJSONObject(i);
|
|
|
|
|
- HashMap row = new HashMap();
|
|
|
|
|
- row.put("textField_mm2t71jm",orderCode);//todo:采购订单单号
|
|
|
|
|
- row.put("textField_ml6g7k5e", customerName);//todo:客户
|
|
|
|
|
- row.put("textField_ml6g7k5f", orderNumber);//todo:订单号
|
|
|
|
|
-
|
|
|
|
|
- styleNumber = detail.getString("productCode");//款号
|
|
|
|
|
- row.put("textField_ml7c3yhq", styleNumber);//todo:款号
|
|
|
|
|
-
|
|
|
|
|
- productDescription = detail.getString("productName");//产品描述
|
|
|
|
|
- row.put("textField_ml7c3yhr", productDescription);//todo:产品描述
|
|
|
|
|
-
|
|
|
|
|
- JSONArray array1 = detail.getJSONArray("customFieldValues");
|
|
|
|
|
- color = array1.stream()
|
|
|
|
|
- .map(obj -> (JSONObject) obj)
|
|
|
|
|
- .filter(item -> item.getIntValue("fieldId") == 82259)
|
|
|
|
|
- .map(item -> item.getString("value"))
|
|
|
|
|
- .findFirst()
|
|
|
|
|
- .orElse(null);
|
|
|
|
|
- ArrayList colorList = new ArrayList();
|
|
|
|
|
- colorList.add(color);
|
|
|
|
|
- String color_AAA = null;
|
|
|
|
|
- try {
|
|
|
|
|
- color_AAA = getProductColor(colorList);
|
|
|
|
|
- } catch (JacksonException e) {
|
|
|
|
|
- throw new RuntimeException(e);
|
|
|
|
|
- }
|
|
|
|
|
- row.put("textField_ml7c3yhs", color_AAA);//todo:颜色
|
|
|
|
|
-
|
|
|
|
|
- number = detail.getDoubleValue("qty");//数量
|
|
|
|
|
- row.put("numberField_ml7c3yht", number);//todo:数量
|
|
|
|
|
-
|
|
|
|
|
- unitPrice = detail.getDoubleValue("unitPrice");//销售单价
|
|
|
|
|
- row.put("numberField_ml7c3yhu", unitPrice);//todo:销售单价
|
|
|
|
|
-
|
|
|
|
|
- salesAmount = number * unitPrice;//销售金额
|
|
|
|
|
- row.put("numberField_ml7c3yhv", salesAmount);//todo:销售金额
|
|
|
|
|
- String customFieldValues = detail.getString("customFieldValues");
|
|
|
|
|
- ObjectMapper mapper = new ObjectMapper();
|
|
|
|
|
- JsonNode jsonarray = null;
|
|
|
|
|
- try {
|
|
|
|
|
- jsonarray = mapper.readTree(customFieldValues);
|
|
|
|
|
- } catch (JsonProcessingException e) {
|
|
|
|
|
- throw new RuntimeException(e);
|
|
|
|
|
- }
|
|
|
|
|
- for (JsonNode node : jsonarray) {
|
|
|
|
|
- if (node.get("fieldId").asInt() == 47919) {
|
|
|
|
|
- currency = node.get("value").asText();
|
|
|
|
|
- } else if (node.get("fieldId").asInt() == 165251) {
|
|
|
|
|
- USDrate = node.get("value").asDouble();
|
|
|
|
|
-
|
|
|
|
|
- } else if (node.get("fieldId").asInt() == 161783) {
|
|
|
|
|
- flygcb = node.get("value").asDouble();
|
|
|
|
|
|
|
+ if (!isSample){
|
|
|
|
|
+ JSONArray products_A = JSONObject.parseObject(jsonString2).getJSONArray("data").getJSONObject(0).getJSONArray("saleManageOrderDetailRowApiVOList");//销售订单明细数据
|
|
|
|
|
+
|
|
|
|
|
+ if(products_A != null) {
|
|
|
|
|
+ for (int i = 0; i < products_A.size(); i++) {
|
|
|
|
|
+ JSONObject detail = products_A.getJSONObject(i);
|
|
|
|
|
+ HashMap row = new HashMap();
|
|
|
|
|
+ row.put("textField_mm2t71jm",orderCode);//todo:采购订单单号
|
|
|
|
|
+ row.put("textField_ml6g7k5e", customerName);//todo:客户
|
|
|
|
|
+ row.put("textField_ml6g7k5f", orderNumber);//todo:订单号
|
|
|
|
|
+
|
|
|
|
|
+ styleNumber = detail.getString("productCode");//款号
|
|
|
|
|
+ row.put("textField_ml7c3yhq", styleNumber);//todo:款号
|
|
|
|
|
+
|
|
|
|
|
+ productDescription = detail.getString("productName");//产品描述
|
|
|
|
|
+ row.put("textField_ml7c3yhr", productDescription);//todo:产品描述
|
|
|
|
|
+
|
|
|
|
|
+ JSONArray array1 = detail.getJSONArray("customFieldValues");
|
|
|
|
|
+ color = array1.stream()
|
|
|
|
|
+ .map(obj -> (JSONObject) obj)
|
|
|
|
|
+ .filter(item -> item.getIntValue("fieldId") == 82259)
|
|
|
|
|
+ .map(item -> item.getString("value"))
|
|
|
|
|
+ .findFirst()
|
|
|
|
|
+ .orElse(null);
|
|
|
|
|
+ ArrayList colorList = new ArrayList();
|
|
|
|
|
+ colorList.add(color);
|
|
|
|
|
+ String color_AAA = null;
|
|
|
|
|
+ try {
|
|
|
|
|
+ color_AAA = getProductColor(colorList);
|
|
|
|
|
+ } catch (JacksonException e) {
|
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- row.put("textField_ml7c3yhw", currency);//todo:币别
|
|
|
|
|
- row.put("numberField_ml86221y", USDrate);//todo:美金汇率
|
|
|
|
|
- row.put("numberField_ml86221z", flygcb);//todo:辅料预估成本
|
|
|
|
|
- if(currency.equals("USD")){
|
|
|
|
|
- saletotalAmount = salesAmount * USDrate;
|
|
|
|
|
- }else {
|
|
|
|
|
- saletotalAmount = salesAmount;
|
|
|
|
|
- }
|
|
|
|
|
- row.put("numberField_ml862220",saletotalAmount);
|
|
|
|
|
- //下面是采购订单的明细数据
|
|
|
|
|
- row.put("textField_ml7c3yhx",shortName);//todo:生产工厂
|
|
|
|
|
- for(int j=0;j<products.size();j++){
|
|
|
|
|
- if(styleNumber.equals(products.getJSONObject(j).getString("productCode"))){
|
|
|
|
|
- //找到对应的采购一行数据
|
|
|
|
|
- row.put("numberField_ml7c3yhy",products.getJSONObject(j).getDouble("purchasePrice"));//todo:采购单价
|
|
|
|
|
- row.put("numberField_ml7c3yhz",products.getJSONObject(j).getDouble("purchaseNum"));//todo:采购数量
|
|
|
|
|
- row.put("numberField_ml7c3yi0",products.getJSONObject(j).getDouble("purchasePrice") * products.getJSONObject(j).getDouble("purchaseNum"));//todo:采购金额
|
|
|
|
|
|
|
+ row.put("textField_ml7c3yhs", color_AAA);//todo:颜色
|
|
|
|
|
+
|
|
|
|
|
+ number = detail.getDoubleValue("qty");//数量
|
|
|
|
|
+ row.put("numberField_ml7c3yht", number);//todo:数量
|
|
|
|
|
+
|
|
|
|
|
+ unitPrice = detail.getDoubleValue("unitPrice");//销售单价
|
|
|
|
|
+ row.put("numberField_ml7c3yhu", unitPrice);//todo:销售单价
|
|
|
|
|
+
|
|
|
|
|
+ salesAmount = number * unitPrice;//销售金额
|
|
|
|
|
+ row.put("numberField_ml7c3yhv", salesAmount);//todo:销售金额
|
|
|
|
|
+ String customFieldValues = detail.getString("customFieldValues");
|
|
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
|
|
+ JsonNode jsonarray = null;
|
|
|
|
|
+ try {
|
|
|
|
|
+ jsonarray = mapper.readTree(customFieldValues);
|
|
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
|
+ }
|
|
|
|
|
+ for (JsonNode node : jsonarray) {
|
|
|
|
|
+ if (node.get("fieldId").asInt() == 47919) {
|
|
|
|
|
+ currency = node.get("value").asText();
|
|
|
|
|
+ } else if (node.get("fieldId").asInt() == 165251) {
|
|
|
|
|
+ USDrate = node.get("value").asDouble();
|
|
|
|
|
+
|
|
|
|
|
+ } else if (node.get("fieldId").asInt() == 161783) {
|
|
|
|
|
+ flygcb = node.get("value").asDouble();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ row.put("textField_ml7c3yhw", currency);//todo:币别
|
|
|
|
|
+ row.put("numberField_ml86221y", USDrate);//todo:美金汇率
|
|
|
|
|
+ row.put("numberField_ml86221z", flygcb);//todo:辅料预估成本
|
|
|
|
|
+ if(currency.equals("USD")){
|
|
|
|
|
+ saletotalAmount = salesAmount * USDrate;
|
|
|
|
|
+ }else {
|
|
|
|
|
+ saletotalAmount = salesAmount;
|
|
|
|
|
+ }
|
|
|
|
|
+ row.put("numberField_ml862220",saletotalAmount);
|
|
|
|
|
+ //下面是采购订单的明细数据
|
|
|
|
|
+ row.put("textField_ml7c3yhx",shortName);//todo:生产工厂
|
|
|
|
|
+ for(int j=0;j<products.size();j++){
|
|
|
|
|
+ if(styleNumber.equals(products.getJSONObject(j).getString("productCode"))){
|
|
|
|
|
+ //找到对应的采购一行数据
|
|
|
|
|
+ row.put("numberField_ml7c3yhy",products.getJSONObject(j).getDouble("purchasePrice"));//todo:采购单价
|
|
|
|
|
+ row.put("numberField_ml7c3yhz",products.getJSONObject(j).getDouble("purchaseNum"));//todo:采购数量
|
|
|
|
|
+ row.put("numberField_ml7c3yi0",products.getJSONObject(j).getDouble("purchasePrice") * products.getJSONObject(j).getDouble("purchaseNum"));//todo:采购金额
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- // ========== 修改点4:将当前行转换为Map<String,String>并暂存 ==========
|
|
|
|
|
- Map<String, String> rowMap = new HashMap<>();
|
|
|
|
|
- for (Object key : row.keySet()) {
|
|
|
|
|
- Object value = row.get(key);
|
|
|
|
|
- rowMap.put(key.toString(), value != null ? value.toString() : "");
|
|
|
|
|
- }
|
|
|
|
|
- currentOrderRows.add(rowMap);
|
|
|
|
|
|
|
+ // ========== 修改点4:将当前行转换为Map<String,String>并暂存 ==========
|
|
|
|
|
+ Map<String, String> rowMap = new HashMap<>();
|
|
|
|
|
+ for (Object key : row.keySet()) {
|
|
|
|
|
+ Object value = row.get(key);
|
|
|
|
|
+ rowMap.put(key.toString(), value != null ? value.toString() : "");
|
|
|
|
|
+ }
|
|
|
|
|
+ currentOrderRows.add(rowMap);
|
|
|
|
|
|
|
|
- // ========== 修改点5:累加当前订单的汇总数据用于计算毛利率 ==========
|
|
|
|
|
- orderTotalSalesAmount += saletotalAmount;
|
|
|
|
|
- orderTotalPurchaseAmount += (Double)row.get("numberField_ml7c3yi0");
|
|
|
|
|
- orderTotalFlygcb += flygcb;
|
|
|
|
|
|
|
+ // ========== 修改点5:累加当前订单的汇总数据用于计算毛利率 ==========
|
|
|
|
|
+ orderTotalSalesAmount += saletotalAmount;
|
|
|
|
|
+ orderTotalPurchaseAmount += (Double)row.get("numberField_ml7c3yi0");
|
|
|
|
|
+ orderTotalFlygcb += flygcb;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // ========== 修改点6:计算当前订单的毛利率 ==========
|
|
|
|
|
- double mlv = 0.0;
|
|
|
|
|
- if (orderTotalSalesAmount > 0) {
|
|
|
|
|
- mlv = (orderTotalSalesAmount - orderTotalPurchaseAmount - orderTotalFlygcb) / orderTotalSalesAmount;
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- System.out.println("订单 " + orderCode + " 毛利率: " + String.format("%.2f%%", mlv * 100));
|
|
|
|
|
|
|
+ // ========== 修改点6:计算当前订单的毛利率 ==========
|
|
|
|
|
+ double mlv = 0.0;
|
|
|
|
|
+ if (orderTotalSalesAmount > 0) {
|
|
|
|
|
+ mlv = (orderTotalSalesAmount - orderTotalPurchaseAmount - orderTotalFlygcb) / orderTotalSalesAmount;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- // ========== 修改点7:根据毛利率决定添加到哪个列表 ==========
|
|
|
|
|
- if (mlv >= 0.15) {
|
|
|
|
|
- // 高毛利率订单
|
|
|
|
|
- tabledataHigh.addAll(currentOrderRows);
|
|
|
|
|
- System.out.println("订单 " + orderCode + " 归类到高毛利率审批(>=15%)");
|
|
|
|
|
|
|
+ System.out.println("订单 " + orderCode + " 毛利率: " + String.format("%.2f%%", mlv * 100));
|
|
|
|
|
+
|
|
|
|
|
+ // ========== 修改点7:根据毛利率决定添加到哪个列表 ==========
|
|
|
|
|
+ if (mlv >= 0.15) {
|
|
|
|
|
+ // 高毛利率订单
|
|
|
|
|
+ tabledataHigh.addAll(currentOrderRows);
|
|
|
|
|
+ System.out.println("订单 " + orderCode + " 归类到高毛利率审批(>=15%)");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 低毛利率订单
|
|
|
|
|
+ tabledataLow.addAll(currentOrderRows);
|
|
|
|
|
+ System.out.println("订单 " + orderCode + " 归类到低毛利率审批(<15%)");
|
|
|
|
|
+ }
|
|
|
} else {
|
|
} else {
|
|
|
- // 低毛利率订单
|
|
|
|
|
- tabledataLow.addAll(currentOrderRows);
|
|
|
|
|
- System.out.println("订单 " + orderCode + " 归类到低毛利率审批(<15%)");
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ HashMap body1 = new HashMap();
|
|
|
|
|
+ body1.put("orderCode",orderCode);//订单编号:orderCode
|
|
|
|
|
+ body1.put("vendorCode",dataArray.getJSONObject(0).getString("vendorCode"));//供应商编码:gysnumber
|
|
|
|
|
+ String aa = dataArray.getJSONObject(0).getLong("purchaseTime").toString();
|
|
|
|
|
+ String purchaseTime = Instant.ofEpochMilli(Long.parseLong(aa))
|
|
|
|
|
+ .atZone(ZoneId.of("Asia/Shanghai"))
|
|
|
|
|
+ .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
+ body1.put("purchaseTime",purchaseTime);//采购日期:purchaseTime
|
|
|
|
|
+ String bb = dataArray.getJSONObject(0).getLong("planArrivalTime").toString();
|
|
|
|
|
+ String planArrivalTime = Instant.ofEpochMilli(Long.parseLong(bb))
|
|
|
|
|
+ .atZone(ZoneId.of("Asia/Shanghai"))
|
|
|
|
|
+ .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
+ body1.put("planArrivalTime",planArrivalTime);//计划到货日期:planArrivalTime
|
|
|
|
|
+ ArrayList<Map<String,String>> customFiled = new ArrayList();
|
|
|
|
|
+ HashMap field = new HashMap();
|
|
|
|
|
+ field.put("name","采购订单钉钉审批状态");
|
|
|
|
|
+ field.put("value","审批完成");//审批状态
|
|
|
|
|
+ customFiled.add(field);
|
|
|
|
|
+ body1.put("purchaseOrderCustomFieldsValue",customFiled);
|
|
|
|
|
+ UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/purchaseOrder/update", header, null, body1);
|
|
|
|
|
+ log.info("---------【回传,{},采购订单状态完成】-----------",dataArray.getJSONObject(0).getString("orderCode"));
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.info("样品订单的采购订单自动通过审批失败,采购订单编号为:{}",orderCode);
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ List<Map<String, Object>> oldList = new ArrayList<>();
|
|
|
|
|
+ if (type.equals(targetValueUpdate)){
|
|
|
|
|
+ oldIds.forEach(h->{
|
|
|
|
|
+ List<Map> oldDataList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
|
+ .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
|
|
|
|
|
+ .formUuid("FORM-278D56A5065641F8AC95BCA0A8CE8447D8QY")
|
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_mmx9gyct", h)))
|
|
|
|
|
+ .build());
|
|
|
|
|
+ if (ObjectUtil.isNotNull(oldDataList) && oldDataList.size()>0){
|
|
|
|
|
+ List<Map> sonList = ydService.queryDetails(YDParam.builder()
|
|
|
|
|
+ .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
|
|
|
|
|
+ .formInstanceId(UtilMap.getString(oldDataList.get(0),"textField_mmx9gycu"))
|
|
|
|
|
+ .formUuid("FORM-3A54B12BE3D241218A75242B935F2987YWV2")
|
|
|
|
|
+ .tableFieldId("tableField_ml6g7k5d")
|
|
|
|
|
+ .build());
|
|
|
|
|
+ if (ObjectUtil.isNotNull(sonList) && sonList.size() > 0){
|
|
|
|
|
+ sonList.forEach(s->{
|
|
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
|
|
+ TABLEFIELD_ENUM.forEach((k,v)->{
|
|
|
|
|
+ map.put(v,UtilMap.getString(s,k));
|
|
|
|
|
+ });
|
|
|
|
|
+ oldList.add(map);
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// ========== 修改点8:分别处理高低毛利率的审批 ==========
|
|
// ========== 修改点8:分别处理高低毛利率的审批 ==========
|
|
|
|
|
|
|
|
// 处理高毛利率的审批 (mlv >= 0.15)
|
|
// 处理高毛利率的审批 (mlv >= 0.15)
|
|
@@ -1331,6 +1368,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
//组装数据塞到采购审批单号明细
|
|
//组装数据塞到采购审批单号明细
|
|
|
List<Map<String, String>> orderSummaryListHigh = calculateOrderSummary(tabledataHigh);
|
|
List<Map<String, String>> orderSummaryListHigh = calculateOrderSummary(tabledataHigh);
|
|
|
formdataHigh.put("tableField_ml7ch2pj", orderSummaryListHigh);
|
|
formdataHigh.put("tableField_ml7ch2pj", orderSummaryListHigh);
|
|
|
|
|
+ formdataHigh.put("tableField_mmx6gata", oldList);
|
|
|
|
|
|
|
|
//数值统计毛利率
|
|
//数值统计毛利率
|
|
|
int szHigh = 0;
|
|
int szHigh = 0;
|
|
@@ -1365,6 +1403,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
|
|
|
|
|
//组装数据塞到采购明细表
|
|
//组装数据塞到采购明细表
|
|
|
formdataLow.put("tableField_ml6g7k5d", tabledataLow);
|
|
formdataLow.put("tableField_ml6g7k5d", tabledataLow);
|
|
|
|
|
+ formdataLow.put("tableField_mmx6gata", oldList);
|
|
|
|
|
|
|
|
//组装数据塞到采购审批单号明细
|
|
//组装数据塞到采购审批单号明细
|
|
|
List<Map<String, String>> orderSummaryListLow = calculateOrderSummary(tabledataLow);
|
|
List<Map<String, String>> orderSummaryListLow = calculateOrderSummary(tabledataLow);
|
|
@@ -1403,6 +1442,56 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
|
|
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ @SneakyThrows
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<Map<String, Object>> queryAllPurchase() {
|
|
|
|
|
+ HashMap header = new HashMap();
|
|
|
|
|
+ header.put("X-AUTH", HeiHuAccessToken().getData().toString());
|
|
|
|
|
+ header.put("Content-Type", "application/json");
|
|
|
|
|
+ boolean hasMoreData = true;
|
|
|
|
|
+ int pageNum = 1;
|
|
|
|
|
+ int pageSize = 100;
|
|
|
|
|
+ List<Map<String, Object>> dataList = new ArrayList<>();
|
|
|
|
|
+ while (hasMoreData) {
|
|
|
|
|
+ HashMap body = new HashMap();
|
|
|
|
|
+ Map<String, Integer> page = new HashMap<>();
|
|
|
|
|
+ page.put("pageNum", pageNum);
|
|
|
|
|
+ page.put("pageSize", pageSize);
|
|
|
|
|
+ List<Integer> status = Arrays.asList(1);
|
|
|
|
|
+ body.put("page", page);
|
|
|
|
|
+ body.put("status", status);
|
|
|
|
|
+
|
|
|
|
|
+ String doPost = UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/purchaseOrder/queryList2", header, null, body);//查询采购订单
|
|
|
|
|
+ log.info("header:{}",header.toString());
|
|
|
|
|
+ System.out.println("header:" + header.toString());
|
|
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
|
|
+ Map<String, Object> response = mapper.readValue(doPost, Map.class);
|
|
|
|
|
+
|
|
|
|
|
+ if (!"01000000".equals(response.get("code"))) {
|
|
|
|
|
+ System.out.println("请求失败: " + response.get("msg"));
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+// dataList.addAll(UtilMap.getList(response,"data"));
|
|
|
|
|
+ List<Map<String, Object>> mapList = (List<Map<String, Object>>) response.get("data");
|
|
|
|
|
+ if (ObjectUtil.isNotNull(mapList) && mapList.size() > 0){
|
|
|
|
|
+ dataList.addAll(mapList);
|
|
|
|
|
+ hasMoreData = mapList.size() >= pageSize;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ hasMoreData = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ pageNum++;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ Thread.sleep(200);
|
|
|
|
|
+ } catch (InterruptedException e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ return dataList;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public McR purchaseUpdateSchedule() throws JacksonException {
|
|
public McR purchaseUpdateSchedule() throws JacksonException {
|
|
|
HashMap header = new HashMap();
|
|
HashMap header = new HashMap();
|
|
@@ -1414,7 +1503,6 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
int pageNum = 1;
|
|
int pageNum = 1;
|
|
|
int pageSize = 100;
|
|
int pageSize = 100;
|
|
|
boolean hasMoreData = true;
|
|
boolean hasMoreData = true;
|
|
|
- boolean isUpdate = false;
|
|
|
|
|
|
|
|
|
|
while (hasMoreData) {
|
|
while (hasMoreData) {
|
|
|
HashMap body = new HashMap();
|
|
HashMap body = new HashMap();
|
|
@@ -1431,7 +1519,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
Map<String, Object> response = mapper.readValue(doPost, Map.class);
|
|
Map<String, Object> response = mapper.readValue(doPost, Map.class);
|
|
|
|
|
|
|
|
if (!"01000000".equals(response.get("code"))) {
|
|
if (!"01000000".equals(response.get("code"))) {
|
|
|
- System.out.println("请求失败: " + response.get("msg"));
|
|
|
|
|
|
|
+ log.info("请求失败: {}" , response.get("msg"));
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1817,7 +1905,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
//组装数据塞到采购明细表
|
|
//组装数据塞到采购明细表
|
|
|
- formdataHigh.put("tableField_mmx6gata", oldList);
|
|
|
|
|
|
|
+ formdataLow.put("tableField_mmx6gata", oldList);
|
|
|
//组装数据塞到采购明细表
|
|
//组装数据塞到采购明细表
|
|
|
formdataLow.put("tableField_ml6g7k5d", tabledataLow);
|
|
formdataLow.put("tableField_ml6g7k5d", tabledataLow);
|
|
|
|
|
|