#
Junjie
2024-03-19 77ac6b72ed82d51d0d45bf156ac1b5bb3cb15782
#
13个文件已添加
1个文件已修改
569 ■■■■■ 已修改文件
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/controller/FlowController.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/controller/FlowGraphController.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/entity/FlowGraph.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/mapper/FlowGraphMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/service/FlowGraphService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/service/impl/FlowGraphServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/SlaveType.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/protocol/StaProtocol.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/thread/CrnThread.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/thread/DevpThread.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/thread/FlowExecute.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/thread/impl/SiemensCrnThread.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/thread/impl/SiemensDevpThread.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/resources/mapper/asrs/FlowGraphMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/controller/FlowController.java
@@ -1,24 +1,28 @@
package com.zy.asrs.wcs.asrs.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.wcs.asrs.entity.FlowGraph;
import com.zy.asrs.wcs.asrs.entity.param.FlowLogicCodeParam;
import com.zy.asrs.wcs.asrs.service.FlowGraphService;
import com.zy.asrs.wcs.core.thread.FlowExecute;
import com.zy.asrs.wcs.system.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.*;
@RestController
@RequestMapping("/flow")
public class FlowController {
@RequestMapping("/api")
public class FlowController extends BaseController {
    @PostMapping("/analysisExportData")
    @Autowired
    private FlowGraphService flowGraphService;
    @Autowired
    private FlowExecute flowExecute;
    @PostMapping("/flow/analysisExportData")
    public R analysisExportData(@RequestBody HashMap<String, Object> param) {
        System.out.println(param);
        List<LinkedHashMap<String, Object>> data = (List<LinkedHashMap<String, Object>>) param.get("data");
        ArrayList<FlowLogicCodeParam> list = new ArrayList<>();
@@ -32,7 +36,7 @@
            Boolean isLogic = Boolean.parseBoolean(mapData.get("isLogic").toString());
            String searchLogicId = mapData.get("searchLogicId").toString();
            Boolean searchLogicBool = Boolean.parseBoolean(mapData.get("searchLogicBool").toString());
            String codeContent = mapData.get("codeContent").toString();
            String codeContent = mapData.get("codeContent") == null ? "" : mapData.get("codeContent").toString();
            if (isLogic) {
                FlowLogicCodeParam flowLogicCodeParam = new FlowLogicCodeParam();
                flowLogicCodeParam.setId(id);
@@ -60,9 +64,36 @@
        }
        System.out.println(list);
        FlowGraph flowGraph = new FlowGraph();
        if (param.get("id") != null) {
            flowGraph.setId(Integer.parseInt(param.get("id").toString()));
        }else {
            flowGraph.setCreateTime(new Date());
            flowGraph.setStatus(0);
        }
        flowGraph.setName(param.get("name").toString());
        flowGraph.setMemo(param.get("memo").toString());
        flowGraph.setOriginData(param.get("originData").toString());
        flowGraph.setProcessData(JSON.toJSONString(list));
        flowGraph.setUpdateTime(new Date());
        flowGraph.setHostId(getHostId());
        flowGraphService.saveOrUpdate(flowGraph);
        return R.ok();
    }
    @PostMapping("/flow/mockRun")
    public R mockRun(@RequestBody HashMap<String, Object> param) {
        FlowGraph flowGraph = flowGraphService.getById(param.get("id").toString());
        if (flowGraph == null) {
            return R.error("流程图不存在");
        }
        //开始模拟执行
        String processData = flowGraph.getProcessData();
        List<FlowLogicCodeParam> list = JSON.parseArray(processData, FlowLogicCodeParam.class);
        boolean execute = flowExecute.execute(list);
        return R.ok().add(execute);
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/controller/FlowGraphController.java
New file
@@ -0,0 +1,113 @@
package com.zy.asrs.wcs.asrs.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.wcs.common.annotation.OperationLog;
import com.zy.asrs.wcs.common.domain.BaseParam;
import com.zy.asrs.wcs.common.domain.KeyValVo;
import com.zy.asrs.wcs.common.domain.PageParam;
import com.zy.asrs.wcs.asrs.entity.FlowGraph;
import com.zy.asrs.wcs.asrs.service.FlowGraphService;
import com.zy.asrs.wcs.system.controller.BaseController;
import com.zy.asrs.wcs.utils.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
@RestController
@RequestMapping("/api")
public class FlowGraphController extends BaseController {
    @Autowired
    private FlowGraphService flowGraphService;
    @PreAuthorize("hasAuthority('asrs:flowGraph:list')")
    @PostMapping("/flowGraph/page")
    public R page(@RequestBody Map<String, Object> map) {
        BaseParam baseParam = buildParam(map, BaseParam.class);
        PageParam<FlowGraph, BaseParam> pageParam = new PageParam<>(baseParam, FlowGraph.class);
        return R.ok().add(flowGraphService.page(pageParam, pageParam.buildWrapper(true)));
    }
    @PreAuthorize("hasAuthority('asrs:flowGraph:list')")
    @PostMapping("/flowGraph/list")
    public R list(@RequestBody(required = false) Map<String, Object> map) {
        return R.ok().add(flowGraphService.list());
    }
    @PreAuthorize("hasAuthority('asrs:flowGraph:list')")
    @GetMapping("/flowGraph/{id}")
    public R get(@PathVariable("id") Long id) {
        return R.ok().add(flowGraphService.getById(id));
    }
    @PreAuthorize("hasAuthority('asrs:flowGraph:save')")
    @OperationLog("添加流程图")
    @PostMapping("/flowGraph/save")
    public R save(@RequestBody FlowGraph flowGraph) {
        if (!flowGraphService.save(flowGraph)) {
            return R.error("添加失败");
        }
        return R.ok("添加成功");
    }
    @PreAuthorize("hasAuthority('asrs:flowGraph:update')")
    @OperationLog("修改流程图")
    @PostMapping("/flowGraph/update")
    public R update(@RequestBody FlowGraph flowGraph) {
        if (!flowGraphService.updateById(flowGraph)) {
            return R.error("修改失败");
        }
        return R.ok("修改成功");
    }
    @PreAuthorize("hasAuthority('asrs:flowGraph:update')")
    @OperationLog("修改流程图状态")
    @PostMapping("/flowGraph/updateFlowStatus")
    public R updateFlowStatus(@RequestBody Map<String,Object> param) {
        FlowGraph flowGraph = flowGraphService.getById(param.get("id").toString());
        if (flowGraph == null) {
            return R.error("流程图不存在");
        }
        flowGraph.setStatus(Integer.parseInt(param.get("status").toString()));
        flowGraph.setUpdateTime(new Date());
        flowGraphService.saveOrUpdate(flowGraph);
        return R.ok("修改成功");
    }
    @PreAuthorize("hasAuthority('asrs:flowGraph:remove')")
    @OperationLog("删除流程图")
    @PostMapping("/flowGraph/remove/{ids}")
    public R remove(@PathVariable Long[] ids) {
        if (!flowGraphService.removeByIds(Arrays.asList(ids))) {
            return R.error("删除失败");
        }
        return R.ok("删除成功");
    }
    @PreAuthorize("hasAuthority('asrs:flowGraph:list')")
    @PostMapping("/flowGraph/query")
    public R query(@RequestParam(required = false) String condition) {
        List<KeyValVo> vos = new ArrayList<>();
        LambdaQueryWrapper<FlowGraph> wrapper = new LambdaQueryWrapper<>();
        if (!Cools.isEmpty(condition)) {
            wrapper.like(FlowGraph::getId, condition);
        }
        flowGraphService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
                item -> vos.add(new KeyValVo(item.getId(), item.getId()))
        );
        return R.ok().add(vos);
    }
    @PreAuthorize("hasAuthority('asrs:flowGraph:list')")
    @PostMapping("/flowGraph/export")
    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
        ExcelUtil.build(ExcelUtil.create(flowGraphService.list(), FlowGraph.class), response);
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/entity/FlowGraph.java
New file
@@ -0,0 +1,137 @@
package com.zy.asrs.wcs.asrs.entity;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.zy.asrs.wcs.system.entity.Host;
import org.springframework.format.annotation.DateTimeFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.wcs.system.service.UserService;
import com.zy.asrs.wcs.system.service.HostService;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("wcs_flow_graph")
public class FlowGraph implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value= "")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 原始数据
     */
    @ApiModelProperty(value= "原始数据")
    private String originData;
    /**
     * 处理后的数据
     */
    @ApiModelProperty(value= "处理后的数据")
    private String processData;
    @ApiModelProperty(value= "")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    @ApiModelProperty(value= "")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 是否启用 0: 否  1: 是
     */
    @ApiModelProperty(value= "是否启用 0: 否  1: 是  ")
    private Integer status;
    /**
     * 所属机构
     */
    @ApiModelProperty(value= "所属机构")
    private Long hostId;
    /**
     * 流程图名称
     */
    @ApiModelProperty(value= "流程图名称")
    private String name;
    /**
     * 备注
     */
    @ApiModelProperty(value= "备注")
    private String memo;
    public FlowGraph() {}
    public FlowGraph(String originData, String processData, Date createTime, Date updateTime, Integer status, Long hostId, String name, String memo) {
        this.originData = originData;
        this.processData = processData;
        this.createTime = createTime;
        this.updateTime = updateTime;
        this.status = status;
        this.hostId = hostId;
        this.name = name;
        this.memo = memo;
    }
    //    FlowGraph flowGraph = new FlowGraph(
//            null,    // 原始数据
//            null,    // 处理后的数据
//            null,    //
//            null,    //
//            null    // 是否启用
//    );
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
    public String getUpdateTime$(){
        if (Cools.isEmpty(this.updateTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
    }
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
            case 0:
                return "否";
            case 1:
                return "是";
            default:
                return String.valueOf(this.status);
        }
    }
    public String getHostId$(){
        HostService service = SpringUtils.getBean(HostService.class);
        Host host = service.getById(this.hostId);
        if (!Cools.isEmpty(host)){
            return String.valueOf(host.getName());
        }
        return null;
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/mapper/FlowGraphMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.wcs.asrs.mapper;
import com.zy.asrs.wcs.asrs.entity.FlowGraph;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface FlowGraphMapper extends BaseMapper<FlowGraph> {
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/service/FlowGraphService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.wcs.asrs.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.asrs.wcs.asrs.entity.FlowGraph;
public interface FlowGraphService extends IService<FlowGraph> {
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/asrs/service/impl/FlowGraphServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.wcs.asrs.service.impl;
import com.zy.asrs.wcs.asrs.mapper.FlowGraphMapper;
import com.zy.asrs.wcs.asrs.entity.FlowGraph;
import com.zy.asrs.wcs.asrs.service.FlowGraphService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("flowGraphService")
public class FlowGraphServiceImpl extends ServiceImpl<FlowGraphMapper, FlowGraph> implements FlowGraphService {
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/SlaveType.java
New file
@@ -0,0 +1,23 @@
package com.zy.asrs.wcs.core.model.enums;
public enum SlaveType {
    Crn,
    Devp,
    Barcode,
    Led,
    Scale,
    Ste,
    Shuttle,
    Lift,
    ;
    public static SlaveType findInstance(String s){
        for (SlaveType type : SlaveType.values()) {
            if (type.toString().equals(s)) {
                return type;
            }
        }
        return null;
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/protocol/StaProtocol.java
New file
@@ -0,0 +1,83 @@
package com.zy.asrs.wcs.core.model.protocol;
import lombok.Data;
/**
 * 输送线plc单个站点详细信息
 */
@Data
public class StaProtocol implements Cloneable {
    // 站点编号
    private Integer siteId;
    // ----------------------------------------------------------------
    // 工作号
    private Short workNo = 0;
    // ----------------------------------------------------------------
    // 目标站
    private Short staNo;
    // ----------------------------------------------------------------
    // 自动
    private boolean autoing;
    // 有物
    private boolean loading;
    // 可入
    private boolean inEnable;
    // 可出
    private boolean outEnable;
    // 空板信号
    private boolean emptyMk;
    // 满托盘
    private boolean fullPlt;
    // 高
    private boolean high;
    // 低
    private boolean low;
    // 锁定标记
    private boolean pakMk = true;
    // 外形检测 ------------------------------------------------------------------------
    // 前超限
    private boolean frontErr;
    // 后超限
    private boolean backErr;
    // 高超限
    private boolean highErr;
    // 左超限
    private boolean leftErr;
    // 右超限
    private boolean rightErr;
    // 超重
    private boolean weightErr;
    // 扫码失败
    private boolean barcodeErr;
    @Override
    public StaProtocol clone() {
        try {
            return (StaProtocol) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/thread/CrnThread.java
New file
@@ -0,0 +1,7 @@
package com.zy.asrs.wcs.core.thread;
public interface CrnThread {
    boolean loadAndUnload();//取放货
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/thread/DevpThread.java
New file
@@ -0,0 +1,9 @@
package com.zy.asrs.wcs.core.thread;
public interface DevpThread {
    boolean writeWorkNo(short workNo);//写入工作号
    boolean writeStaNo(short staNo);//写入目标站
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/thread/FlowExecute.java
New file
@@ -0,0 +1,72 @@
package com.zy.asrs.wcs.core.thread;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zy.asrs.wcs.asrs.entity.param.FlowLogicCodeParam;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
public class FlowExecute {
    //执行流程图
    public boolean execute(List<FlowLogicCodeParam> list) {
        for (FlowLogicCodeParam param : list) {
            if (param.getId().equals("1")) {
                return executeFlow(param.getLogicTrue());
            }
        }
        System.out.println(list);
        return false;
    }
    private boolean executeFlow(List<Map<String, Object>> list) {
        for (Map<String, Object> map : list) {
            JSONObject data = (JSONObject) map.get("data");
            if (data.getString("type").equals("devp")) {
                JSONObject devp = data.getJSONObject("devpType");
                String devpNo = devp.getString("devpNo");//输送线PLC
                String staNo = devp.getString("staNo");//站号
                Boolean enableStaStatus = devp.getBoolean("enableStaStatus");//判断站点状态
                JSONArray staStatus = devp.getJSONArray("staStatus");//站点状态列表
                String staJudgementFailExecute = devp.getString("staJudgementFailExecute");//判断失败后是否继续执行流程
                Boolean writeWorkNoStatus = devp.getBoolean("writeWorkNoStatus");//是否写入工作号
                Boolean writeStaNoStatus = devp.getBoolean("writeStaNoStatus");//是否写入目标站
                String writeWorkNo = devp.getString("writeWorkNo");//写入工作号数据
                String writeStaNo = devp.getString("writeStaNo");//写入目标站数据
                if (enableStaStatus) {
                    //判断站点状态
                    boolean statusFlag = true;//默认判断通过
                    for (Object status : staStatus) {
                        System.out.println(status);
                    }
                    if (!statusFlag) {
                        //判断不通过
                        if (staJudgementFailExecute.equals("stop")) {
                            //判断失败后不继续执行
                            return false;
                        }
                    }
                }
                if (writeWorkNoStatus) {
                    //写入工作号
                }
                if (writeStaNoStatus) {
                    //写入目标站
                }
                System.out.println(devp);
            }
            System.out.println(data);
        }
        System.out.println(list);
        return false;
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/thread/impl/SiemensCrnThread.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.wcs.core.thread.impl;
import com.zy.asrs.wcs.core.thread.CrnThread;
public class SiemensCrnThread implements CrnThread {
    @Override
    public boolean loadAndUnload() {
        System.out.println("loadAndUnload 被执行");
        return false;
    }
}
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/thread/impl/SiemensDevpThread.java
New file
@@ -0,0 +1,21 @@
package com.zy.asrs.wcs.core.thread.impl;
import com.zy.asrs.wcs.core.model.protocol.StaProtocol;
import com.zy.asrs.wcs.core.thread.DevpThread;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class SiemensDevpThread implements DevpThread {
    private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
    @Override
    public boolean writeWorkNo(short workNo) {
        return false;
    }
    @Override
    public boolean writeStaNo(short staNo) {
        return false;
    }
}
zy-asrs-wcs/src/main/resources/mapper/asrs/FlowGraphMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.wcs.asrs.mapper.FlowGraphMapper">
</mapper>