|
@@ -1007,6 +1007,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
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<>();
|
|
Map<String, List<String>> purchaserOrderCodes = new HashMap<>();
|
|
|
|
|
|
|
|
int pageNum = 1;
|
|
int pageNum = 1;
|
|
@@ -1042,7 +1043,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
List<Map<String, Object>> customFieldValues = (List<Map<String, Object>>) item.get("customFieldValues");
|
|
List<Map<String, Object>> customFieldValues = (List<Map<String, Object>>) item.get("customFieldValues");
|
|
|
if (customFieldValues != null) {
|
|
if (customFieldValues != null) {
|
|
|
for (Map<String, Object> field : customFieldValues) {
|
|
for (Map<String, Object> field : customFieldValues) {
|
|
|
- if (targetValue.equals(field.get("value"))) {
|
|
|
|
|
|
|
+ if (targetValue.equals(field.get("value") ) || targetValue1.equals(field.get("value"))) {
|
|
|
hasTargetStatus = true;
|
|
hasTargetStatus = true;
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
@@ -1110,12 +1111,34 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
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));
|
|
|
- //针对同一个采购员,遍历下面的订单编号
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // ========== 修改点1:声明两个列表分别存储不同毛利率的订单数据 ==========
|
|
|
|
|
+ // 针对同一个采购员,遍历下面的订单编号
|
|
|
System.out.println("开始处理采购员 " + purchaserName + " 的 " + orderCodes.size() + " 个待审批订单");
|
|
System.out.println("开始处理采购员 " + purchaserName + " 的 " + orderCodes.size() + " 个待审批订单");
|
|
|
- HashMap formdata = new HashMap();
|
|
|
|
|
- List<Map<String,String>> tabledata = new ArrayList();
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 高毛利率表单数据 (mlv >= 0.15)
|
|
|
|
|
+ HashMap formdataHigh = new HashMap();
|
|
|
|
|
+ List<Map<String,String>> tabledataHigh = new ArrayList();
|
|
|
|
|
+
|
|
|
|
|
+ // 低毛利率表单数据 (mlv < 0.15)
|
|
|
|
|
+ HashMap formdataLow = new HashMap();
|
|
|
|
|
+ List<Map<String,String>> tabledataLow = new ArrayList();
|
|
|
|
|
+
|
|
|
|
|
+ // ========== 修改点2:为每个订单创建临时存储列表 ==========
|
|
|
|
|
+ // 用于暂存每个订单的明细数据,等计算出毛利率后再决定添加到哪个列表
|
|
|
|
|
+ Map<String, List<Map<String, String>>> tempOrderDataMap = new HashMap<>();
|
|
|
|
|
+ // 用于存储每个订单的汇总数据,用于计算毛利率
|
|
|
|
|
+ Map<String, Map<String, Double>> orderSummaryForMlv = new HashMap<>();
|
|
|
|
|
+
|
|
|
for (String orderCode : orderCodes) {
|
|
for (String orderCode : orderCodes) {
|
|
|
System.out.println("正在处理订单: " + orderCode);
|
|
System.out.println("正在处理订单: " + orderCode);
|
|
|
|
|
+
|
|
|
|
|
+ // ========== 修改点3:为当前订单创建临时数据存储 ==========
|
|
|
|
|
+ List<Map<String, String>> currentOrderRows = new ArrayList<>();
|
|
|
|
|
+ double orderTotalSalesAmount = 0.0;
|
|
|
|
|
+ double orderTotalPurchaseAmount = 0.0;
|
|
|
|
|
+ double orderTotalFlygcb = 0.0;
|
|
|
|
|
+
|
|
|
//todo:查询订单的销售订单 | 客户 销售订单号 款式 产品描述 颜色 | 数量 销售单价 销售金额 | 币别 美金汇率 辅料预估成本 销售总金额
|
|
//todo:查询订单的销售订单 | 客户 销售订单号 款式 产品描述 颜色 | 数量 销售单价 销售金额 | 币别 美金汇率 辅料预估成本 销售总金额
|
|
|
String customerName = "",orderNumber ="",styleNumber ="",productDescription = "",color = "";
|
|
String customerName = "",orderNumber ="",styleNumber ="",productDescription = "",color = "";
|
|
|
Double number,unitPrice,salesAmount;
|
|
Double number,unitPrice,salesAmount;
|
|
@@ -1158,7 +1181,6 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
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");//客户
|
|
|
-// purchaserName = data.getString("purchaserName");//采购员
|
|
|
|
|
}
|
|
}
|
|
|
ObjectMapper objectMapper2 = new ObjectMapper();
|
|
ObjectMapper objectMapper2 = new ObjectMapper();
|
|
|
JsonNode dataNode2 = null;//主表数据
|
|
JsonNode dataNode2 = null;//主表数据
|
|
@@ -1259,37 +1281,121 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
row.put("numberField_ml7c3yi0",products.getJSONObject(j).getDouble("purchasePrice") * products.getJSONObject(j).getDouble("purchaseNum"));//todo:采购金额
|
|
row.put("numberField_ml7c3yi0",products.getJSONObject(j).getDouble("purchasePrice") * products.getJSONObject(j).getDouble("purchaseNum"));//todo:采购金额
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- tabledata.add(row);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // ========== 修改点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;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // ========== 修改点6:计算当前订单的毛利率 ==========
|
|
|
|
|
+ double mlv = 0.0;
|
|
|
|
|
+ if (orderTotalSalesAmount > 0) {
|
|
|
|
|
+ mlv = (orderTotalSalesAmount - orderTotalPurchaseAmount - orderTotalFlygcb) / orderTotalSalesAmount;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ 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%)");
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- //todo:组装数据塞到采购明细表
|
|
|
|
|
- formdata.put("tableField_ml6g7k5d",tabledata);
|
|
|
|
|
- //todo:组装数据塞到采购审批单号明细
|
|
|
|
|
- List<Map<String, String>> orderSummaryList = calculateOrderSummary(tabledata);
|
|
|
|
|
- formdata.put("tableField_ml7ch2pj",orderSummaryList);
|
|
|
|
|
- //todo:数值统计毛利率
|
|
|
|
|
- int sz = 0;
|
|
|
|
|
- for (Map map : orderSummaryList ) {
|
|
|
|
|
- Object numberFieldMm2t71jo = map.get("numberField_mm2t71jo");
|
|
|
|
|
- log.info((String) numberFieldMm2t71jo);
|
|
|
|
|
- sz += Integer.parseInt((String) numberFieldMm2t71jo);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // ========== 修改点8:分别处理高低毛利率的审批 ==========
|
|
|
|
|
+
|
|
|
|
|
+ // 处理高毛利率的审批 (mlv >= 0.15)
|
|
|
|
|
+ if (!tabledataHigh.isEmpty()) {
|
|
|
|
|
+ System.out.println("\n========== 开始处理高毛利率审批(>=15%),共 " + tabledataHigh.size() + " 条明细 ==========");
|
|
|
|
|
+
|
|
|
|
|
+ //组装数据塞到采购明细表
|
|
|
|
|
+ formdataHigh.put("tableField_ml6g7k5d", tabledataHigh);
|
|
|
|
|
+
|
|
|
|
|
+ //组装数据塞到采购审批单号明细
|
|
|
|
|
+ List<Map<String, String>> orderSummaryListHigh = calculateOrderSummary(tabledataHigh);
|
|
|
|
|
+ formdataHigh.put("tableField_ml7ch2pj", orderSummaryListHigh);
|
|
|
|
|
+
|
|
|
|
|
+ //数值统计毛利率
|
|
|
|
|
+ int szHigh = 0;
|
|
|
|
|
+ for (Map map : orderSummaryListHigh) {
|
|
|
|
|
+ Object numberFieldMm2t71jo = map.get("numberField_mm2t71jo");
|
|
|
|
|
+ log.info((String) numberFieldMm2t71jo);
|
|
|
|
|
+ szHigh += Integer.parseInt((String) numberFieldMm2t71jo);
|
|
|
|
|
+ }
|
|
|
|
|
+ formdataHigh.put("numberField_mm2t71jp", szHigh);
|
|
|
|
|
+
|
|
|
|
|
+ /*发起流程 - 高毛利率审批*/
|
|
|
|
|
+ String userId = getDDToken(purchaserName);
|
|
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
|
|
+ .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
|
|
|
|
|
+ .formUuid("FORM-3A54B12BE3D241218A75242B935F2987YWV2") // 高毛利率使用原表单
|
|
|
|
|
+ .userId(userId)
|
|
|
|
|
+ .formDataJson(JSON.toJSONString(formdataHigh))
|
|
|
|
|
+ .build(), YDConf.FORM_OPERATION.start).toString();
|
|
|
|
|
+
|
|
|
|
|
+ /*修改采购订单为审批中*/
|
|
|
|
|
+ for (Map map : orderSummaryListHigh) {
|
|
|
|
|
+ String textFieldMl7ch2pk = (String) map.get("textField_ml7ch2pk");
|
|
|
|
|
+ callback(textFieldMl7ch2pk);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ System.out.println("高毛利率审批流程发起完成");
|
|
|
}
|
|
}
|
|
|
- formdata.put("numberField_mm2t71jp",sz);
|
|
|
|
|
- /*发起流程*/
|
|
|
|
|
- String userId = getDDToken(purchaserName);
|
|
|
|
|
- ydClient.operateData(YDParam.builder()
|
|
|
|
|
- .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
|
|
|
|
|
- .formUuid("FORM-3A54B12BE3D241218A75242B935F2987YWV2")
|
|
|
|
|
- .userId(userId)
|
|
|
|
|
- .formDataJson(JSON.toJSONString(formdata))
|
|
|
|
|
- .build(), YDConf.FORM_OPERATION.start).toString();
|
|
|
|
|
- /*修改采购订单为审批中*/
|
|
|
|
|
- for(Map map : orderSummaryList){
|
|
|
|
|
- String textFieldMl7ch2pk = (String)map.get("textField_ml7ch2pk");
|
|
|
|
|
- callback(textFieldMl7ch2pk);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 处理低毛利率的审批 (mlv < 0.15)
|
|
|
|
|
+ if (!tabledataLow.isEmpty()) {
|
|
|
|
|
+ System.out.println("\n========== 开始处理低毛利率审批(<15%),共 " + tabledataLow.size() + " 条明细 ==========");
|
|
|
|
|
+
|
|
|
|
|
+ //组装数据塞到采购明细表
|
|
|
|
|
+ formdataLow.put("tableField_ml6g7k5d", tabledataLow);
|
|
|
|
|
+
|
|
|
|
|
+ //组装数据塞到采购审批单号明细
|
|
|
|
|
+ List<Map<String, String>> orderSummaryListLow = calculateOrderSummary(tabledataLow);
|
|
|
|
|
+ formdataLow.put("tableField_ml7ch2pj", orderSummaryListLow);
|
|
|
|
|
+
|
|
|
|
|
+ //数值统计毛利率
|
|
|
|
|
+ int szLow = 0;
|
|
|
|
|
+ for (Map map : orderSummaryListLow) {
|
|
|
|
|
+ Object numberFieldMm2t71jo = map.get("numberField_mm2t71jo");
|
|
|
|
|
+ log.info((String) numberFieldMm2t71jo);
|
|
|
|
|
+ szLow += Integer.parseInt((String) numberFieldMm2t71jo);
|
|
|
|
|
+ }
|
|
|
|
|
+ formdataLow.put("numberField_mm2t71jp", szLow);
|
|
|
|
|
+
|
|
|
|
|
+ /*发起流程 - 低毛利率审批*/
|
|
|
|
|
+ String userId = getDDToken(purchaserName);
|
|
|
|
|
+ // ========== 修改点9:如果低毛利率需要不同表单,可以在这里修改formUuid ==========
|
|
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
|
|
+ .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken())
|
|
|
|
|
+ .formUuid("FORM-3A54B12BE3D241218A75242B935F2987YWV2") // 如果需要不同流程,替换这里的UUID
|
|
|
|
|
+ .userId(userId)
|
|
|
|
|
+ .formDataJson(JSON.toJSONString(formdataLow))
|
|
|
|
|
+ .build(), YDConf.FORM_OPERATION.start).toString();
|
|
|
|
|
+
|
|
|
|
|
+ /*修改采购订单为审批中*/
|
|
|
|
|
+ for (Map map : orderSummaryListLow) {
|
|
|
|
|
+ String textFieldMl7ch2pk = (String) map.get("textField_ml7ch2pk");
|
|
|
|
|
+ callback(textFieldMl7ch2pk);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ System.out.println("低毛利率审批流程发起完成");
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1323,7 +1429,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 累加各项金额
|
|
// 累加各项金额
|
|
|
- String salesAmountStr = UtilMap.getString(row,"numberField_ml7c3yhv");
|
|
|
|
|
|
|
+ String salesAmountStr = UtilMap.getString(row,"numberField_ml862220");
|
|
|
String purchaseAmountStr = UtilMap.getString(row,"numberField_ml7c3yi0");
|
|
String purchaseAmountStr = UtilMap.getString(row,"numberField_ml7c3yi0");
|
|
|
String flygcbStr = UtilMap.getString(row,"numberField_ml86221z");
|
|
String flygcbStr = UtilMap.getString(row,"numberField_ml86221z");
|
|
|
|
|
|