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>