Kaynağa Gözat

风格服饰

xmy 1 hafta önce
ebeveyn
işleme
49f9c6a994

+ 4 - 2
mjava-fenggefushi/src/main/java/com/malk/fenggefushi/controller/HeiHuOrderController.java

@@ -6,6 +6,7 @@ import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.checkerframework.framework.qual.PostconditionAnnotation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -95,8 +96,9 @@ public class HeiHuOrderController {
     /*todo:定时抓取采购订单*/
     @SneakyThrows
     @PostMapping("/test12")
-    McR test12(){
-        return McR.success(huOrderService.test12());
+    @Scheduled(cron = "0 */5 * * * ?")
+    McR purchaseSchedule(){
+        return McR.success(huOrderService.purchaseSchedule());
     }
 
 

+ 1 - 1
mjava-fenggefushi/src/main/java/com/malk/fenggefushi/service/HeiHuOrderService.java

@@ -42,6 +42,6 @@ public interface HeiHuOrderService {
     String getProductColor(@RequestParam List list) throws JacksonException;
 
     /*采购订单定时同步*/
-    McR test12() throws JacksonException;
+    McR purchaseSchedule() throws JacksonException;
 
 }

+ 153 - 6
mjava-fenggefushi/src/main/java/com/malk/fenggefushi/service/Impl/HeiHuOrderServiceImpl.java

@@ -562,7 +562,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                         .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(aa))
+                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
@@ -1002,11 +1002,10 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
     }
 
     @Override
-    public McR test12() throws JacksonException {
+    public McR purchaseSchedule() throws JacksonException {
         HashMap header = new HashMap();
         header.put("X-AUTH", HeiHuAccessToken().getData().toString());
         header.put("Content-Type", "application/json");
-
         String targetValue = "合同确认,提交审批";
         Map<String, List<String>> purchaserOrderCodes = new HashMap<>();
 
@@ -1159,7 +1158,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                             for(int i=0;i<array.size();i++){
                                 JSONObject data = array.getJSONObject(i);
                                 customerName = data.getString("customerCode");//客户
-                                purchaserName = data.getString("purchaserName");//采购员
+//                                purchaserName = data.getString("purchaserName");//采购员
                             }
                             ObjectMapper objectMapper2 = new ObjectMapper();
                             JsonNode dataNode2 = null;//主表数据
@@ -1188,6 +1187,7 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                                 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:订单号
 
@@ -1267,7 +1267,16 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                         //todo:组装数据塞到采购明细表
                         formdata.put("tableField_ml6g7k5d",tabledata);
                         //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);
                         ydClient.operateData(YDParam.builder()
@@ -1276,13 +1285,151 @@ public class HeiHuOrderServiceImpl implements HeiHuOrderService {
                                 .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);
+                        }
                     });
         }
 
-
         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

+ 1 - 1
mjava-fenggefushi/src/main/resources/application-prod.yml

@@ -1,6 +1,6 @@
 # 环境配置
 server:
-  port: 7878
+  port: 8083
   servlet:
     context-path: /api/fengge
 

+ 1 - 1
mjava-fenggefushi/src/main/resources/application.yml

@@ -1,3 +1,3 @@
 spring:
   profiles:
-    active: dev
+    active: prod