Ver Fonte

开放设备接口

yzc há 1 ano atrás
pai
commit
193a1da15c

+ 4 - 0
hx-mes/pom.xml

@@ -41,6 +41,10 @@
             <groupId>com.fjhx</groupId>
             <artifactId>hx-sale</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-iot</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 58 - 0
hx-mes/src/main/java/com/fjhx/mes/controller/DeviceOpenController.java

@@ -0,0 +1,58 @@
+package com.fjhx.mes.controller;
+
+import com.fjhx.mes.entity.work.dto.WorkOrderDto;
+import com.fjhx.mes.service.DeviceOpenService;
+import com.ruoyi.common.core.domain.AjaxResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+
+@Slf4j
+@RestController
+@RequestMapping("/open/device")
+public class DeviceOpenController {
+
+
+    @Autowired
+    private DeviceOpenService deviceOpenService;
+
+    /**
+     * 开始生产
+     */
+    @PostMapping("/startProduction")
+    public AjaxResult startProduction(@RequestBody WorkOrderDto dto) {
+        try {
+            AjaxResult success = AjaxResult.success("success", deviceOpenService.startProduction(dto));
+            success.put("success", true);
+            return success;
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            AjaxResult error = AjaxResult.error(e.getMessage(), new HashMap<>());
+            error.put("success", false);
+            return error;
+        }
+    }
+
+    /**
+     * 结束生产
+     */
+    @PostMapping("/endProduction")
+    public AjaxResult endProduction(@RequestBody WorkOrderDto dto) {
+        try {
+            deviceOpenService.endProduction(dto);
+            AjaxResult success = AjaxResult.success("success", new HashMap<>());
+            success.put("success", true);
+            return success;
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            AjaxResult error = AjaxResult.error(e.getMessage(), new HashMap<>());
+            error.put("success", false);
+            return error;
+        }
+    }
+}

+ 5 - 1
hx-mes/src/main/java/com/fjhx/mes/entity/work/dto/WorkOrderDto.java

@@ -7,11 +7,15 @@ import lombok.Setter;
 /**
  * 工单新增编辑入参实体
  *
- * @author 
+ * @author
  * @since 2023-03-29
  */
 @Getter
 @Setter
 public class WorkOrderDto extends WorkOrder {
 
+    /**
+     * 工单号
+     */
+    private Long artNum;
 }

+ 20 - 1
hx-mes/src/main/java/com/fjhx/mes/entity/work/po/WorkOrder.java

@@ -49,7 +49,7 @@ public class WorkOrder extends BasePo {
     /**
      * 说明
      */
-    private String remarks;
+    private String remark;
 
     /**
      * 工单状态
@@ -75,4 +75,23 @@ public class WorkOrder extends BasePo {
      */
     private Long companyId;
 
+    private Long prodTaskId;
+    private Long prodOrderId;
+
+
+    /**
+     * 设备标识
+     */
+    private String deviceIdent;
+
+    /**
+     * 结果0正常 1失败
+     */
+    private Integer result;
+    /**
+     * 备注
+     */
+    private String remak;
+
+
 }

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/service/DeviceOpenService.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.service;
+
+import com.fjhx.mes.entity.work.dto.WorkOrderDto;
+
+import java.util.Map;
+
+public interface DeviceOpenService {
+    /**
+     * 生产开始
+     */
+    Map<String, Object> startProduction(WorkOrderDto dto);
+
+    /**
+     * 生产结束
+     */
+    void endProduction(WorkOrderDto dto);
+}

+ 91 - 0
hx-mes/src/main/java/com/fjhx/mes/service/DeviceOpenServiceImpl.java

@@ -0,0 +1,91 @@
+package com.fjhx.mes.service;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.fjhx.common.utils.Assert;
+import com.fjhx.file.entity.FileInfoVo;
+import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.iot.entity.tda.po.TdaDevice;
+import com.fjhx.iot.service.tda.TdaDeviceService;
+import com.fjhx.mes.entity.production.po.ProductionOrderDetail;
+import com.fjhx.mes.entity.work.dto.WorkOrderDto;
+import com.fjhx.mes.entity.work.po.WorkOrder;
+import com.fjhx.mes.service.production.ProduceOrderDetailService;
+import com.fjhx.mes.service.work.WorkOrderService;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+@Service
+public class DeviceOpenServiceImpl implements DeviceOpenService {
+
+    @Autowired
+    private TdaDeviceService tdaDeviceService;
+    @Autowired
+    private ProduceOrderDetailService produceOrderDetailService;
+    @Autowired
+    private WorkOrderService workOrderService;
+
+    /**
+     * 开始生产
+     */
+    @DSTransactional
+    @Override
+    public Map<String, Object> startProduction(WorkOrderDto dto) {
+        SecurityUtils.setTenantId("000000");
+
+        //根据设备标识获取任务信息
+        String deviceIdent = dto.getDeviceIdent();
+        TdaDevice tdaDevice = tdaDeviceService.getOne(q -> q.eq(TdaDevice::getDeviceCode, deviceIdent));
+        Assert.notEmpty(tdaDevice, "查询不到设备信息");
+        ProductionOrderDetail productionOrderDetail = produceOrderDetailService.getById(tdaDevice.getProdTaskId());
+        Assert.notEmpty(productionOrderDetail, "查询不到任务信息");
+
+        //获取文件信息
+        Map<Long, List<FileInfoVo>> fileMap = ObsFileUtil.getFileMap(Arrays.asList(productionOrderDetail.getContractDetailId()), 2);
+        List<FileInfoVo> fileInfoList = fileMap.getOrDefault(productionOrderDetail.getContractDetailId(), new ArrayList<>());
+        if (ObjectUtil.isEmpty(fileInfoList)) {
+            throw new ServiceException("查询不到生产文件信息!");
+        }
+
+        //创建工单
+        dto.setContractId(productionOrderDetail.getContractId());
+        dto.setContractDetailsId(productionOrderDetail.getContractDetailId());
+        dto.setProdTaskId(productionOrderDetail.getId());
+        dto.setProdOrderId(productionOrderDetail.getProduceOrderId());
+        dto.setProductId(productionOrderDetail.getProductId());
+        dto.setQuantity(BigDecimal.ONE);
+        dto.setStatus(1);//进行中
+        workOrderService.save(dto);
+
+        SecurityUtils.clearTenantId();
+
+        Map<String, Object> data = new HashMap<>();
+        data.put("artNum", dto.getId());//工单号
+        data.put("fileUrl", fileInfoList.get(0).getFileUrl());//生产文件
+        return data;
+    }
+
+    /**
+     * 结束生产
+     */
+    @Override
+    public void endProduction(WorkOrderDto dto) {
+        SecurityUtils.setTenantId("000000");
+
+        Long artNum = dto.getArtNum();
+        Assert.notEmpty(artNum, "工单号不能为空!");
+        WorkOrder byId = workOrderService.getById(artNum);
+        Assert.notEmpty(byId, "查询不到工单信息!");
+
+        dto.setId(artNum);
+        dto.setStatus(2);//已完成
+        workOrderService.updateById(dto);
+
+        SecurityUtils.clearTenantId();
+    }
+}