Browse Source

印染线接口模拟数据

wukai 2 months ago
parent
commit
445c902419

+ 52 - 0
jjt-biz/src/main/java/com/jjt/biz/controller/ApiYrController.java

@@ -0,0 +1,52 @@
+package com.jjt.biz.controller;
+
+import com.jjt.biz.service.IApiAllService;
+import com.jjt.biz.service.IApiYrService;
+import com.jjt.biz.vo.CurrYieldVO;
+import com.jjt.biz.vo.IndexData;
+import com.jjt.biz.vo.TwinAllVO;
+import com.jjt.biz.vo.YrTwinVO;
+import com.jjt.common.constant.CacheConstants;
+import com.jjt.common.core.controller.BaseController;
+import com.jjt.common.core.domain.R;
+import com.jjt.common.core.redis.RedisCache;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+/**
+ * swagger 用户测试方法
+ *
+ * @author ruoyi
+ */
+@Api("全厂孪生数据接口")
+@RestController
+@Slf4j
+public class ApiYrController extends BaseController {
+    @Resource
+    private IApiYrService service;
+    @Resource
+    private RedisCache redisCache;
+
+    @ApiOperation("全厂数字孪生")
+    @GetMapping("/api/yr/data")
+    @CrossOrigin(origins = "*")
+    @ResponseBody
+    public R<?> data() {
+        YrTwinVO vo = new YrTwinVO();
+        vo.setStatus(service.status());
+        vo.setEff(service.eff());
+        vo.setProdTrade(service.prodTrade());
+        vo.setEnergyTrade(service.energyTrade());
+        return R.ok(vo);
+    }
+
+}

+ 43 - 0
jjt-biz/src/main/java/com/jjt/biz/service/IApiYrService.java

@@ -0,0 +1,43 @@
+package com.jjt.biz.service;
+
+import com.jjt.biz.vo.YrEnergyTradeVO;
+import com.jjt.biz.vo.YrProdEfficiencyVO;
+import com.jjt.biz.vo.YrProdLineStatusVO;
+import com.jjt.biz.vo.YrProdTradeVO;
+
+import java.util.List;
+
+/**
+ * 首页统计数据
+ *
+ * @author wukai
+ */
+public interface IApiYrService {
+    /**
+     * 获取产线状态
+     *
+     * @return 结果
+     */
+    YrProdLineStatusVO status();
+
+    /**
+     * 获取生产效率
+     *
+     * @return 结果
+     */
+    List<YrProdEfficiencyVO> eff();
+
+    /**
+     * 获取生产趋势
+     *
+     * @return 结果
+     */
+    List<YrProdTradeVO> prodTrade();
+
+    /**
+     * 获取能耗趋势
+     *
+     * @return 结果
+     */
+    List<YrEnergyTradeVO> energyTrade();
+}

+ 126 - 0
jjt-biz/src/main/java/com/jjt/biz/service/impl/ApiYrServiceImpl.java

@@ -0,0 +1,126 @@
+package com.jjt.biz.service.impl;
+
+import com.jjt.biz.service.IApiYrService;
+import com.jjt.biz.vo.*;
+import com.jjt.common.core.redis.RedisCache;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 首页统计数据
+ *
+ * @author wukai
+ * @date 2024/5/4 20:35
+ */
+@Service
+@Slf4j
+public class ApiYrServiceImpl implements IApiYrService {
+    @Resource
+    private RedisCache redisCache;
+
+    /**
+     * 获取产线状态
+     *
+     * @return 结果
+     */
+    @Override
+    public YrProdLineStatusVO status() {
+        YrProdLineStatusVO vo = new YrProdLineStatusVO();
+        vo.mock();
+        return vo;
+    }
+
+    /**
+     * 获取生产效率
+     *
+     * @return 结果
+     */
+    @Override
+    public List<YrProdEfficiencyVO> eff() {
+        List<YrProdEfficiencyVO> list = new ArrayList<>();
+        for (int i = 0; i < 9; i++) {
+            YrProdEfficiencyVO vo = new YrProdEfficiencyVO(i);
+            vo.mock();
+            list.add(vo);
+        }
+        return list;
+    }
+
+    /**
+     * 获取生产趋势
+     *
+     * @return 结果
+     */
+    @Override
+    public List<YrProdTradeVO> prodTrade() {
+        return mockProd();
+    }
+
+    /**
+     * 获取能耗趋势
+     *
+     * @return 结果
+     */
+    @Override
+    public List<YrEnergyTradeVO> energyTrade() {
+        return mockEnergy();
+    }
+
+    private List<YrProdTradeVO> mockProd() {
+        List<YrProdTradeVO> list = new ArrayList<>();
+        LocalDate end = LocalDate.now().minusDays(1);
+        LocalDate start = end.minusDays(30);
+        do {
+            YrProdTradeVO vo = new YrProdTradeVO();
+            vo.setDate(start.getDayOfMonth() + "");
+            vo.setTips(start.toString());
+            vo.mock();
+            list.add(vo);
+            start = start.plusDays(1);
+        } while (!start.isAfter(end));
+        return list;
+
+    }
+
+    private List<YrEnergyTradeVO> mockEnergy() {
+        List<YrEnergyTradeVO> list = new ArrayList<>();
+        LocalDate end = LocalDate.now().minusDays(1);
+        LocalDate start = end.minusDays(30);
+        do {
+            YrEnergyTradeVO vo = new YrEnergyTradeVO();
+            vo.setDate(start.getDayOfMonth() + "");
+            vo.setTips(start.toString());
+            vo.mock();
+            list.add(vo);
+            start = start.plusDays(1);
+        } while (!start.isAfter(end));
+        return list;
+
+    }
+
+    /**
+     * 获取周几
+     *
+     * @param date
+     * @return
+     */
+    private String week(LocalDate date) {
+        String[] weeks = {"一", "二", "三", "四", "五", "六", "日"};
+        return "周" + weeks[date.getDayOfWeek().getValue() - 1];
+    }
+
+    public static void main(String[] args) {
+        int day = 7;
+        LocalDate end = LocalDate.now().minusDays(1);
+        LocalDate start = end.minusDays(day - 1);
+        do {
+            System.err.println(start + "\t" + start.getDayOfWeek().getValue());
+            start = start.plusDays(1);
+        } while (!start.isAfter(end));
+    }
+}

+ 69 - 0
jjt-biz/src/main/java/com/jjt/biz/vo/YrEnergyTradeVO.java

@@ -0,0 +1,69 @@
+package com.jjt.biz.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * 能耗趋势视图
+ *
+ * @author ruoyi
+ * @date 2024-12-30
+ */
+@ApiModel(value = "YrEnergyTradeVO", description = "印染能耗趋势视图")
+@Data
+public class YrEnergyTradeVO {
+    @ApiModelProperty("时间")
+    private String date;
+    @ApiModelProperty("原始时间")
+    private String tips;
+    @ApiModelProperty("各产线数据")
+    private List<Line> line;
+
+    @Data
+    @NoArgsConstructor
+    public static class Line {
+        @ApiModelProperty("产线编号,为0时代表全部")
+        private Integer line;
+        @ApiModelProperty("电")
+        private BigDecimal electricity;
+        @ApiModelProperty("汽")
+        private BigDecimal steam;
+        @ApiModelProperty("水")
+        private BigDecimal water;
+        @ApiModelProperty("价格")
+        private BigDecimal price;
+
+        public Line(Integer line) {
+            this.line = line;
+        }
+
+        public void mock() {
+            Random random = new Random();
+            double price = 2.0 + random.nextDouble();
+            this.price = BigDecimal.valueOf(price).setScale(1, RoundingMode.HALF_UP);
+            double electricity = 5000 + 1000 * random.nextDouble();
+            this.electricity = BigDecimal.valueOf(electricity).setScale(1, RoundingMode.HALF_UP);
+            double steam = 40 + 20 * random.nextDouble();
+            this.steam = BigDecimal.valueOf(steam).setScale(1, RoundingMode.HALF_UP);
+            double water = 40 + 20 * random.nextDouble();
+            this.water = BigDecimal.valueOf(water).setScale(1, RoundingMode.HALF_UP);
+        }
+    }
+
+    public void mock() {
+        this.line = new ArrayList<>();
+        for (int i = 0; i < 9; i++) {
+            YrEnergyTradeVO.Line line = new YrEnergyTradeVO.Line(i);
+            line.mock();
+            this.line.add(line);
+        }
+    }
+}

+ 76 - 0
jjt-biz/src/main/java/com/jjt/biz/vo/YrProdEfficiencyVO.java

@@ -0,0 +1,76 @@
+package com.jjt.biz.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Random;
+
+/**
+ * 生产趋势视图
+ *
+ * @author ruoyi
+ * @date 2024-12-30
+ */
+@ApiModel(value = "YrProdEfficiencyVO", description = "印染生产效率")
+@Data
+@NoArgsConstructor
+public class YrProdEfficiencyVO {
+    @ApiModelProperty("产线,如果为0就表示全部")
+    private Integer line;
+    @ApiModelProperty("产线开机数")
+    private Integer open;
+    @ApiModelProperty("产线总设备数")
+    private Integer total;
+    @ApiModelProperty("单位能耗")
+    private BigDecimal energy;
+    @ApiModelProperty("开机率")
+    private BigDecimal ratio;
+    @ApiModelProperty("米长")
+    private BigDecimal length;
+    @ApiModelProperty("重量")
+    private BigDecimal weight;
+    @ApiModelProperty("A班开机时间")
+    private BigDecimal timeA;
+    @ApiModelProperty("B班开机时间")
+    private BigDecimal timeB;
+    @ApiModelProperty("A班米长")
+    private BigDecimal lengthA;
+    @ApiModelProperty("B班米长")
+    private BigDecimal lengthB;
+    @ApiModelProperty("A班重量")
+    private BigDecimal weightA;
+    @ApiModelProperty("B班重量")
+    private BigDecimal weightB;
+    @ApiModelProperty("A班稼动率")
+    private BigDecimal effA;
+    @ApiModelProperty("B班稼动率")
+    private BigDecimal effB;
+
+    public YrProdEfficiencyVO(Integer line) {
+        this.line = line;
+    }
+
+    public void mock() {
+        Integer[] total = {267, 38, 36, 35, 35, 30, 31, 32, 30};
+        Integer[] open = {88, 28, 26, 25, 25, 20, 21, 22, 20};
+        Random random = new Random();
+        this.total = total[line];
+        this.open = open[line];
+        this.energy = BigDecimal.valueOf(2.5d);
+        this.ratio = BigDecimal.valueOf(this.open).divide(BigDecimal.valueOf(this.total), 0, RoundingMode.HALF_UP);
+        this.lengthA = BigDecimal.valueOf(3000 + 3000 * random.nextDouble()).setScale(2, RoundingMode.HALF_UP);
+        this.lengthB = BigDecimal.valueOf(3000 + 3000 * random.nextDouble()).setScale(2, RoundingMode.HALF_UP);
+        this.length = this.lengthA.add(this.lengthB);
+        this.weightA = BigDecimal.valueOf(20 + 20 * random.nextDouble()).setScale(2, RoundingMode.HALF_UP);
+        this.weightB = BigDecimal.valueOf(20 + 20 * random.nextDouble()).setScale(2, RoundingMode.HALF_UP);
+        this.weight = this.weightA.add(this.weightB);
+        this.timeA = BigDecimal.valueOf(5 + random.nextInt(7));
+        this.timeB = BigDecimal.valueOf(5 + random.nextInt(7));
+        this.effA = timeA.divide(BigDecimal.valueOf(12), 2, RoundingMode.HALF_UP);
+        this.effB = timeB.divide(BigDecimal.valueOf(12), 2, RoundingMode.HALF_UP);
+    }
+}

+ 42 - 0
jjt-biz/src/main/java/com/jjt/biz/vo/YrProdLineStatusVO.java

@@ -0,0 +1,42 @@
+package com.jjt.biz.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Random;
+
+/**
+ * 员工产量统计对象 TWIN_EMP_CALC
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@ApiModel(value = "ProdLineStatusVO", description = "产线状态")
+@Data
+public class YrProdLineStatusVO {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty("开动产线数量")
+    private Integer openProd;
+    @ApiModelProperty("总开机数")
+    private Integer open;
+    @ApiModelProperty("总设备数")
+    private Integer total;
+    @ApiModelProperty("白柸投放量")
+    private BigDecimal baiPei;
+    @ApiModelProperty("米数")
+    private BigDecimal length;
+    @ApiModelProperty("重量")
+    private BigDecimal weight;
+
+    public void mock() {
+        Random random = new Random();
+        this.baiPei = BigDecimal.valueOf(2000 + random.nextInt(2000));
+        this.length = BigDecimal.valueOf(3000 + random.nextInt(2000));
+        this.weight = BigDecimal.valueOf(20 + random.nextInt(20));
+        this.openProd = 2;
+        this.open = 88;
+        this.total = 267;
+    }
+}

+ 65 - 0
jjt-biz/src/main/java/com/jjt/biz/vo/YrProdTradeVO.java

@@ -0,0 +1,65 @@
+package com.jjt.biz.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * 生产趋势视图
+ *
+ * @author ruoyi
+ * @date 2024-12-30
+ */
+@ApiModel(value = "YrProdTradeVO", description = "印染生产趋势视图")
+@Data
+public class YrProdTradeVO {
+    @ApiModelProperty("时间")
+    private String date;
+
+    @ApiModelProperty("原始时间")
+    private String tips;
+
+    @ApiModelProperty("各产线数据")
+    private List<Line> line;
+
+    public void mock() {
+        this.line = new ArrayList<>();
+        for (int i = 0; i < 9; i++) {
+            Line line = new Line(i);
+            line.mock();
+            this.line.add(line);
+        }
+    }
+
+    @Data
+    @NoArgsConstructor
+    public static class Line {
+        @ApiModelProperty("产线编号,为0时代表全部")
+        private Integer line;
+        @ApiModelProperty("米数")
+        private BigDecimal length;
+        @ApiModelProperty("重量")
+        private BigDecimal weight;
+
+        public Line(Integer line) {
+            this.line = line;
+        }
+
+        public void mock() {
+            Random random = new Random();
+            this.length = BigDecimal.valueOf(3200 + random.nextInt(1300));
+            this.weight = BigDecimal.valueOf(3200 + random.nextInt(1300));
+        }
+    }
+
+    public static void main(String[] args) {
+        YrProdTradeVO.Line line1 = new YrProdTradeVO.Line();
+
+    }
+}

+ 27 - 0
jjt-biz/src/main/java/com/jjt/biz/vo/YrTwinVO.java

@@ -0,0 +1,27 @@
+package com.jjt.biz.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 员工产量统计对象 TWIN_EMP_CALC
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@ApiModel(value = "YrTwinVO", description = "染整线统计视图")
+@Data
+public class YrTwinVO {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty("产线状态")
+    private YrProdLineStatusVO status;
+    @ApiModelProperty("生产效率")
+    private List<YrProdEfficiencyVO> eff;
+    @ApiModelProperty("生产趋势")
+    private List<YrProdTradeVO> prodTrade;
+    @ApiModelProperty("能耗趋势")
+    private List<YrEnergyTradeVO> energyTrade;
+}