|
@@ -562,7 +562,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
body1.put("purchaseTime",purchaseTime);//采购日期:purchaseTime
|
|
body1.put("purchaseTime",purchaseTime);//采购日期:purchaseTime
|
|
|
String bb = data.getLong("planArrivalTime").toString();
|
|
String bb = data.getLong("planArrivalTime").toString();
|
|
|
- String planArrivalTime = Instant.ofEpochMilli(Long.parseLong(aa))
|
|
|
|
|
|
|
+ String planArrivalTime = Instant.ofEpochMilli(Long.parseLong(bb))
|
|
|
.atZone(ZoneId.of("Asia/Shanghai"))
|
|
.atZone(ZoneId.of("Asia/Shanghai"))
|
|
|
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
body1.put("planArrivalTime",planArrivalTime);//计划到货日期:planArrivalTime
|
|
body1.put("planArrivalTime",planArrivalTime);//计划到货日期:planArrivalTime
|
|
@@ -1002,11 +1002,10 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public McR test12() throws JacksonException {
|
|
|
|
|
|
|
+ public McR purchaseSchedule() throws JacksonException {
|
|
|
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 = "合同确认,提交审批";
|
|
|
Map<String, List<String>> purchaserOrderCodes = new HashMap<>();
|
|
Map<String, List<String>> purchaserOrderCodes = new HashMap<>();
|
|
|
|
|
|
|
@@ -1159,7 +1158,7 @@ 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");//采购员
|
|
|
|
|
|
|
+// purchaserName = data.getString("purchaserName");//采购员
|
|
|
}
|
|
}
|
|
|
ObjectMapper objectMapper2 = new ObjectMapper();
|
|
ObjectMapper objectMapper2 = new ObjectMapper();
|
|
|
JsonNode dataNode2 = null;//主表数据
|
|
JsonNode dataNode2 = null;//主表数据
|
|
@@ -1188,6 +1187,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
for (int i = 0; i < products_A.size(); i++) {
|
|
for (int i = 0; i < products_A.size(); i++) {
|
|
|
JSONObject detail = products_A.getJSONObject(i);
|
|
JSONObject detail = products_A.getJSONObject(i);
|
|
|
HashMap row = new HashMap();
|
|
HashMap row = new HashMap();
|
|
|
|
|
+ row.put("textField_mm2t71jm",orderCode);//todo:采购订单单号
|
|
|
row.put("textField_ml6g7k5e", customerName);//todo:客户
|
|
row.put("textField_ml6g7k5e", customerName);//todo:客户
|
|
|
row.put("textField_ml6g7k5f", orderNumber);//todo:订单号
|
|
row.put("textField_ml6g7k5f", orderNumber);//todo:订单号
|
|
|
|
|
|
|
@@ -1267,7 +1267,16 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
//todo:组装数据塞到采购明细表
|
|
//todo:组装数据塞到采购明细表
|
|
|
formdata.put("tableField_ml6g7k5d",tabledata);
|
|
formdata.put("tableField_ml6g7k5d",tabledata);
|
|
|
//todo:组装数据塞到采购审批单号明细
|
|
//todo:组装数据塞到采购审批单号明细
|
|
|
-// formdata.put("tableField_ml7ch2pj",);
|
|
|
|
|
|
|
+ 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);
|
|
|
|
|
+ }
|
|
|
|
|
+ formdata.put("numberField_mm2t71jp",sz);
|
|
|
/*发起流程*/
|
|
/*发起流程*/
|
|
|
String userId = getDDToken(purchaserName);
|
|
String userId = getDDToken(purchaserName);
|
|
|
ydClient.operateData(YDParam.builder()
|
|
ydClient.operateData(YDParam.builder()
|
|
@@ -1276,13 +1285,151 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
|
|
|
.userId(userId)
|
|
.userId(userId)
|
|
|
.formDataJson(JSON.toJSONString(formdata))
|
|
.formDataJson(JSON.toJSONString(formdata))
|
|
|
.build(), YDConf.FORM_OPERATION.start).toString();
|
|
.build(), YDConf.FORM_OPERATION.start).toString();
|
|
|
|
|
+ /*修改采购订单为审批中*/
|
|
|
|
|
+ for(Map map : orderSummaryList){
|
|
|
|
|
+ String textFieldMl7ch2pk = (String)map.get("textField_ml7ch2pk");
|
|
|
|
|
+ callback(textFieldMl7ch2pk);
|
|
|
|
|
+ }
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 根据orderCode对tabledata进行分类求和
|
|
|
|
|
+ * @param tableData 原始明细数据
|
|
|
|
|
+ * @return 按orderCode汇总后的数据列表(只包含求和结果)
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<Map<String, String>> calculateOrderSummary(List<Map<String, String>> tableData) {
|
|
|
|
|
+ // 使用Map暂存每个orderCode的汇总数据
|
|
|
|
|
+ Map<String, Map<String, Double>> summaryMap = new LinkedHashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+ for (Map<String, String> row : tableData) {
|
|
|
|
|
+ String orderCode = row.get("textField_mm2t71jm"); // 采购订单号
|
|
|
|
|
+
|
|
|
|
|
+ if (orderCode == null || orderCode.isEmpty()) {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 获取或创建该订单的汇总Map
|
|
|
|
|
+ Map<String, Double> orderSum = summaryMap.computeIfAbsent(orderCode,
|
|
|
|
|
+ k -> {
|
|
|
|
|
+ Map<String, Double> newMap = new HashMap<>();
|
|
|
|
|
+ newMap.put("salesAmount", 0.0); // 销售金额总和
|
|
|
|
|
+ newMap.put("purchaseAmount", 0.0); // 采购金额总和
|
|
|
|
|
+ newMap.put("flygcb", 0.0); // 辅料预估成本总和
|
|
|
|
|
+ return newMap;
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 累加各项金额
|
|
|
|
|
+ String salesAmountStr = UtilMap.getString(row,"numberField_ml7c3yhv");
|
|
|
|
|
+ String purchaseAmountStr = UtilMap.getString(row,"numberField_ml7c3yi0");
|
|
|
|
|
+ String flygcbStr = UtilMap.getString(row,"numberField_ml86221z");
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (salesAmountStr != null && !salesAmountStr.isEmpty()) {
|
|
|
|
|
+ orderSum.put("salesAmount",
|
|
|
|
|
+ orderSum.get("salesAmount") + Double.parseDouble(salesAmountStr));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (purchaseAmountStr != null && !purchaseAmountStr.isEmpty()) {
|
|
|
|
|
+ orderSum.put("purchaseAmount",
|
|
|
|
|
+ orderSum.get("purchaseAmount") + Double.parseDouble(purchaseAmountStr));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (flygcbStr != null && !flygcbStr.isEmpty()) {
|
|
|
|
|
+ orderSum.put("flygcb",
|
|
|
|
|
+ orderSum.get("flygcb") + Double.parseDouble(flygcbStr));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
|
|
+ System.err.println("数字格式错误: " + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 转换为最终的List<Map<String, String>>
|
|
|
|
|
+ List<Map<String, String>> result = new ArrayList<>();
|
|
|
|
|
+
|
|
|
|
|
+ for (Map.Entry<String, Map<String, Double>> entry : summaryMap.entrySet()) {
|
|
|
|
|
+ String orderCode = entry.getKey();
|
|
|
|
|
+ Map<String, Double> sums = entry.getValue();
|
|
|
|
|
+
|
|
|
|
|
+ double salesAmount = sums.get("salesAmount");
|
|
|
|
|
+ double purchaseAmount = sums.get("purchaseAmount");
|
|
|
|
|
+ double flygcb = sums.get("flygcb");
|
|
|
|
|
+
|
|
|
|
|
+ // 构建结果行
|
|
|
|
|
+ Map<String, String> summaryRow = new LinkedHashMap<>();
|
|
|
|
|
+ summaryRow.put("textField_ml7ch2pk", orderCode);//orderCode:采购审批单单号
|
|
|
|
|
+ summaryRow.put("numberField_ml862225", formatNumber(salesAmount));//salesAmount:销售总金额
|
|
|
|
|
+ summaryRow.put("numberField_ml862226", formatNumber(purchaseAmount));//purchaseAmount:采购订单总金额
|
|
|
|
|
+ summaryRow.put("numberField_ml862228", formatNumber(flygcb));//flygcb:辅料预估总成本
|
|
|
|
|
+ summaryRow.put("numberField_ml86222d",formatNumber((salesAmount - purchaseAmount - flygcb) / salesAmount));//毛利率
|
|
|
|
|
+ Double mlv = (salesAmount - purchaseAmount - flygcb) / salesAmount;
|
|
|
|
|
+ if(mlv >= 0.15){
|
|
|
|
|
+ summaryRow.put("numberField_mm2t71jo", String.valueOf(1));
|
|
|
|
|
+ }else {
|
|
|
|
|
+ summaryRow.put("numberField_mm2t71jo", String.valueOf(0));
|
|
|
|
|
+ }
|
|
|
|
|
+ result.add(summaryRow);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 格式化数字,去除多余的.0
|
|
|
|
|
+ */
|
|
|
|
|
+ private String formatNumber(double number) {
|
|
|
|
|
+ if (Math.abs(number - Math.round(number)) < 0.000001) {
|
|
|
|
|
+ return String.valueOf((long) number);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return String.format("%.2f", number);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /*采购订单发起更新状态*/
|
|
|
|
|
+ @SneakyThrows
|
|
|
|
|
+ public McR callback(String orderNum){
|
|
|
|
|
+ HashMap header = new HashMap();
|
|
|
|
|
+ header.put("X-AUTH",HeiHuAccessToken().getData().toString());
|
|
|
|
|
+ header.put("Content-Type","application/json");
|
|
|
|
|
+ HashMap body = new HashMap();
|
|
|
|
|
+ body.put("orderCode",orderNum);//订单编号
|
|
|
|
|
+ String jsonString2 = UtilHttp.doPost("https://liteweb.blacklake.cn/api/dytin/external/purchaseOrder/queryList2", header, null, body);//todo:查询采购订单
|
|
|
|
|
+ JSONArray dataArray = JSONObject.parseObject(jsonString2).getJSONArray("data");
|
|
|
|
|
+ for (int k=0;k<dataArray.size();k++) {
|
|
|
|
|
+ JSONObject data = dataArray.getJSONObject(k);
|
|
|
|
|
+ //提取订单基本信息 并赋值
|
|
|
|
|
+ HashMap body1 = new HashMap();
|
|
|
|
|
+ body1.put("orderCode",data.getString("orderCode"));//订单编号:orderCode
|
|
|
|
|
+ body1.put("vendorCode",data.getString("vendorCode"));//供应商编码:gysnumber
|
|
|
|
|
+ String aa = data.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 = data.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);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return McR.success();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
|
|
|
/*获取宜搭采购订单汇总*/
|
|
/*获取宜搭采购订单汇总*/
|
|
|
@SneakyThrows
|
|
@SneakyThrows
|