Browse Source

驾驶仓模拟数据

wukai 3 months ago
parent
commit
9dbd7da181
1 changed files with 167 additions and 7 deletions
  1. 167 7
      jjt-biz/src/main/java/com/jjt/biz/controller/ApiDriverController.java

+ 167 - 7
jjt-biz/src/main/java/com/jjt/biz/controller/ApiDriverController.java

@@ -95,7 +95,7 @@ public class ApiDriverController extends BaseController {
 
         // 产品线毛利率数据(百分比)
         List<Map<String, Object>> gpmList = new ArrayList<>();
-        String[] gpmTypes ={"羊毛毯", "纯棉毯", "亚麻毯", "丝绸毯", "竹纤维毯", "涤纶毯", "腈纶毯", "混纺毯", "法兰绒毯", "珊瑚绒毯"};
+        String[] gpmTypes = {"羊毛毯", "纯棉毯", "亚麻毯", "丝绸毯", "竹纤维毯", "涤纶毯", "腈纶毯", "混纺毯", "法兰绒毯", "珊瑚绒毯"};
         for (int i = 0; i < gpmTypes.length; i++) {
             Map<String, Object> gpmMap = new HashMap<>();
             gpmMap.put("type", gpmTypes[i]);    // 产品类型
@@ -204,10 +204,10 @@ public class ApiDriverController extends BaseController {
 
             // 不同的销售类型使用不同的国家组合
             String[][] regionGroups = {
-                {"美国", "日本", "德国", "法国", "韩国"},  // 订单销售
-                {"沙特阿拉伯", "阿联酋", "卡塔尔", "澳大利亚", "巴西"},  // 售后服务
-                {"美国", "德国", "法国", "澳大利亚", "巴西"},  // 金融业务
-                {"日本", "韩国", "沙特阿拉伯", "阿联酋", "卡塔尔"}   // 其他
+                    {"美国", "日本", "德国", "法国", "韩国"},  // 订单销售
+                    {"沙特阿拉伯", "阿联酋", "卡塔尔", "澳大利亚", "巴西"},  // 售后服务
+                    {"美国", "德国", "法国", "澳大利亚", "巴西"},  // 金融业务
+                    {"日本", "韩国", "沙特阿拉伯", "阿联酋", "卡塔尔"}   // 其他
             };
 
             // 根据销售类型选择对应的国家组
@@ -230,7 +230,7 @@ public class ApiDriverController extends BaseController {
                 for (int j = 0; j < 12; j++) {
                     Map<String, Object> monthData = new HashMap<>();
                     double amount = j == 11 ? remaining :
-                        Math.min(random.nextDouble() * (remaining / (12 - j) * 1.5), remaining);
+                            Math.min(random.nextDouble() * (remaining / (12 - j) * 1.5), remaining);
                     monthData.put("month", months[j]);
                     monthData.put("amount", Math.round(amount * 100) / 100.0);
                     monthlySales.add(monthData);
@@ -269,7 +269,167 @@ public class ApiDriverController extends BaseController {
     @CrossOrigin(origins = "*")
     @ResponseBody
     public R<?> cogs() {
-        return R.ok();
+        Map<String, Object> result = new HashMap<>();
+        String n1 = "人工工资+社保+福利";
+        String n2 = "电+汽";
+        String n3 = "运营+管理";
+        String n4 = "机物料+修理+制版材料+染料+助剂+辅料+水";
+        String n5 = "折旧";
+        String n6 = "其他";
+
+        Map<String, Object> curr = new HashMap<>();
+        curr.put("total", "4.32");
+        curr.put("n1", n1);
+        curr.put("v1", 0.76);
+        curr.put("p1", 14.7);
+        curr.put("n2", n2);
+        curr.put("v2", 1.3);
+        curr.put("p2", 26.7);
+        curr.put("n3", n3);
+        curr.put("v3", 0.33);
+        curr.put("p3", 11.3);
+        curr.put("n4", n4);
+        curr.put("v4", 1.63);
+        curr.put("p4", 33.3);
+        curr.put("n5", n5);
+        curr.put("v5", 0.48);
+        curr.put("p5", 13.3);
+        curr.put("n6", n6);
+        curr.put("v6", 0.08);
+        curr.put("p6", 0.67);
+        result.put("curr", curr);
+        Map<String, Object> his = new HashMap<>();
+        String[] months = {"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"};
+
+        // 生成n1-n6各月数据
+        List<Map<String, Object>> n1List = new ArrayList<>();
+        List<Map<String, Object>> n2List = new ArrayList<>();
+        List<Map<String, Object>> n3List = new ArrayList<>();
+        List<Map<String, Object>> n4List = new ArrayList<>();
+        List<Map<String, Object>> n5List = new ArrayList<>();
+        List<Map<String, Object>> n6List = new ArrayList<>();
+
+        // 模拟各月数据,保持总成本趋势一致但各项目有波动
+        double[] totalCosts = {4.2, 4.1, 4.3, 4.5, 4.4, 4.6, 4.8, 4.7, 4.9, 5.0, 5.2, 5.1};
+
+        for (int i = 0; i < months.length; i++) {
+            double total = totalCosts[i];
+            String month = months[i];
+            // 各成本项占比浮动
+            double p1 = 14.7 + (Math.random() * 4 - 2);
+            double p2 = 26.7 + (Math.random() * 4 - 2);
+            double p3 = 11.3 + (Math.random() * 2 - 1);
+            double p4 = 33.3 + (Math.random() * 4 - 2);
+            double p5 = 13.3 + (Math.random() * 2 - 1);
+            double p6 = 0.67 + (Math.random() * 0.6 - 0.3);
+
+            // 计算实际值
+            double v1 = total * p1 / 100;
+            double v2 = total * p2 / 100;
+            double v3 = total * p3 / 100;
+            double v4 = total * p4 / 100;
+            double v5 = total * p5 / 100;
+            double v6 = total * p6 / 100;
+
+            // 添加到各成本项列表
+            n1List.add(new HashMap<String, Object>() {{
+                put("month", month);
+                put("value", Math.round(v1 * 100) / 100.0);
+            }});
+            n2List.add(new HashMap<String, Object>() {{
+                put("month", month);
+                put("value", Math.round(v2 * 100) / 100.0);
+            }});
+            n3List.add(new HashMap<String, Object>() {{
+                put("month", month);
+                put("value", Math.round(v3 * 100) / 100.0);
+            }});
+            n3List.add(new HashMap<String, Object>() {{
+                put("month", month);
+                put("value", Math.round(v3 * 100) / 100.0);
+            }});
+            n4List.add(new HashMap<String, Object>() {{
+                put("month", month);
+                put("value", Math.round(v4 * 100) / 100.0);
+            }});
+            n5List.add(new HashMap<String, Object>() {{
+                put("month", month);
+                put("value", Math.round(v5 * 100) / 100.0);
+            }});
+            n6List.add(new HashMap<String, Object>() {{
+                put("month", month);
+                put("value", Math.round(v6 * 100) / 100.0);
+            }});
+        }
+
+        his.put("n1", n1List);
+        his.put("n2", n2List);
+        his.put("n3", n3List);
+        his.put("n4", n4List);
+        his.put("n5", n5List);
+        his.put("n6", n6List);
+        result.put("his", his);
+
+        // 生成成本总曲线数据(单位:万元)
+        List<Map<String, Object>> totalCostCurve = new ArrayList<>();
+        for (int i = 0; i < months.length; i++) {
+            Map<String, Object> monthCost = new HashMap<>();
+            monthCost.put("month", months[i]);
+            // 将单位成本转换为总成本,乘以10000倍(假设单位是元转换为万元)
+            monthCost.put("value", totalCosts[i] * 10000);
+            totalCostCurve.add(monthCost);
+        }
+        result.put("trend", totalCostCurve);
+
+        // 模拟人均单位产出数据(单位:米/人/天)
+        List<Map<String, Object>> productivityList = new ArrayList<>();
+        String[] processes = {"经编", "前整", "印染", "后整", "成品", "加弹", "剖幅"};
+        double[] productivityValues = {120.5, 95.3, 85.7, 78.2, 65.4, 110.2, 92.8};
+
+        for (int i = 0; i < processes.length; i++) {
+            Map<String, Object> productivityMap = new HashMap<>();
+            productivityMap.put("name", processes[i]);
+            productivityMap.put("value", productivityValues[i]);
+            productivityList.add(productivityMap);
+        }
+        result.put("prod", productivityList);
+        // 成本明细数据
+        List<Map<String, Object>> costDetails = new ArrayList<>();
+        String[] costItems = {"产量", "人工工资", "计时工资", "社会保险费", "职工福利费", "委外加工费", "机物料(含柴油)",
+                            "修理费", "制版材料", "染料", "助剂", "辅料", "水", "水电费", "药剂", "其他", "折旧", "加工成本"};
+        String[] proc = {"加弹","经编", "前整", "印染", "后整", "成品"};
+
+        // 生成各成本项数据
+        for (String item : costItems) {
+            Map<String, Object> itemData = new HashMap<>();
+            itemData.put("item", item);
+
+            // 为每个工序生成随机数据
+            Map<String, Double> processValues = new HashMap<>();
+            List<Double> processValuesList = new ArrayList<>();
+            for (String process : proc) {
+                // 根据成本项类型生成不同范围的值
+                double value = 0;
+                if (item.equals("产量")) {
+                    value = 10000 + Math.random() * 5000; // 产量在1万-1.5万之间
+                } else if (item.equals("人工工资") || item.equals("计时工资")) {
+                    value = 50 + Math.random() * 50; // 50-100之间
+                } else if (item.equals("社会保险费") || item.equals("职工福利费")) {
+                    value = 20 + Math.random() * 30; // 20-50之间
+                } else if (item.equals("折旧")) {
+                    value = 30 + Math.random() * 20; // 30-50之间
+                } else {
+                    value = 10 + Math.random() * 40; // 10-50之间
+                }
+
+                processValuesList.add(Math.round(value * 100) / 100.0); // 保留两位小数
+            }
+            itemData.put("values", processValuesList);
+            costDetails.add(itemData);
+        }
+        result.put("detail", costDetails);
+
+        return R.ok(result);
     }
 
     @ApiOperation("采购")