src/main/java/com/zy/asrs/controller/OpenController.java
@@ -1,12 +1,15 @@ package com.zy.asrs.controller; import com.core.common.R; import com.zy.asrs.domain.param.CancelTaskParam; import com.zy.asrs.domain.param.CompleteTaskParam; import com.zy.asrs.domain.param.CreateMoveTaskParam; import com.zy.common.service.CommonService; import com.zy.core.dispatcher.ShuttleDispatchUtils; 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; @@ -21,15 +24,39 @@ private ShuttleDispatchUtils shuttleDispatchUtils; @PostMapping("/createMoveTask") public R createMoveTask(CreateMoveTaskParam param) { public R createMoveTask(@RequestBody CreateMoveTaskParam param) { if (param == null) { return R.error("参数不能为空"); } boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(commonService.getWorkNo(99), param.getLocNo(), param.getShuttleNo()); boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(null, param.getLocNo(), param.getShuttleNo()); if (dispatchShuttle) { return R.ok(); } return R.error(); return R.error("生成失败"); } @PostMapping("/completeTask") public R completeTask(@RequestBody CompleteTaskParam param) { if (param == null) { return R.error("参数不能为空"); } boolean completeTask = commonService.completeTask(param); if (completeTask) { return R.ok(); } return R.error("任务完成失败"); } @PostMapping("/cancelTask") public R cancelTask(@RequestBody CancelTaskParam param) { if (param == null) { return R.error("参数不能为空"); } boolean completeTask = commonService.cancelTask(param); if (completeTask) { return R.ok(); } return R.error("任务取消失败"); } } src/main/java/com/zy/asrs/controller/WrkMastController.java
New file @@ -0,0 +1,63 @@ package com.zy.asrs.controller; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.annotations.ManagerAuth; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.WrkMastService; import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.Map; @Slf4j @RestController public class WrkMastController extends BaseController { @Autowired private WrkMastService wrkMastService; @RequestMapping(value = "/wrkMast/list/auth") @ManagerAuth public R list(@RequestParam(defaultValue = "1")Integer curr, @RequestParam(defaultValue = "10")Integer limit, @RequestParam(required = false)String orderByField, @RequestParam(required = false)String orderByType, @RequestParam(required = false)String condition, @RequestParam Map<String, Object> param){ excludeTrash(param); EntityWrapper<WrkMast> wrapper = new EntityWrapper<>(); convert(param, wrapper); allLike(WrkMast.class, param.keySet(), wrapper, condition); if (!Cools.isEmpty(orderByField)){ if (orderByField.endsWith("$")){ orderByField = orderByField.substring(0, orderByField.length()-1); } wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); }else { wrapper.orderBy("io_time", false); } return R.ok(wrkMastService.selectPage(new Page<>(curr, limit), wrapper)); } private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ for (Map.Entry<String, Object> entry : map.entrySet()){ String val = String.valueOf(entry.getValue()); if (val.contains(RANGE_TIME_LINK)){ String[] dates = val.split(RANGE_TIME_LINK); wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); } else { wrapper.like(entry.getKey(), val); } } } } src/main/java/com/zy/asrs/domain/param/CancelTaskParam.java
New file @@ -0,0 +1,10 @@ package com.zy.asrs.domain.param; import lombok.Data; @Data public class CancelTaskParam { private Integer wrkNo; } src/main/java/com/zy/asrs/domain/param/CompleteTaskParam.java
New file @@ -0,0 +1,10 @@ package com.zy.asrs.domain.param; import lombok.Data; @Data public class CompleteTaskParam { private Integer wrkNo; } src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -57,10 +57,6 @@ @TableField("io_pri") private Double ioPri; @ApiModelProperty(value= "") @TableField("wrk_date") private Date wrkDate; /** * 目标库位 */ @@ -158,6 +154,12 @@ @TableField(value = "lift_no",strategy = FieldStrategy.IGNORED) private Integer liftNo; /** * WMS任务号 */ @ApiModelProperty(value= "WMS任务号") private String wmsWrkNo; public String getWrkSts$(){ BasWrkStatusMapper mapper = SpringUtils.getBean(BasWrkStatusMapper.class); BasWrkStatus entity = mapper.selectById(this.wrkSts); @@ -174,13 +176,6 @@ return entity.getIoDesc(); } return null; } public String getWrkDate$(){ if (Cools.isEmpty(this.wrkDate)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.wrkDate); } public String getLocNo$(){ src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -9,6 +9,7 @@ import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.WrkMastService; import com.zy.common.utils.Synchro; import com.zy.system.entity.User; import com.zy.system.service.UserService; import io.swagger.annotations.ApiModelProperty; @@ -39,18 +40,7 @@ private Integer wrkNo; @ApiModelProperty(value= "") @TableField("inv_wh") private String invWh; @ApiModelProperty(value= "") private Date ymd; @ApiModelProperty(value= "") private String mk; @ApiModelProperty(value= "") @TableField("whs_type") private Integer whsType; /** * 工作状态 @@ -67,40 +57,11 @@ private Integer ioType; /** * 堆垛机号 */ @ApiModelProperty(value= "堆垛机号") @TableField("crn_no") private Integer crnNo; /** * 穿梭车 */ @ApiModelProperty(value= "穿梭车") @TableField("ste_no") private Integer steNo; /** * 边缘库位 */ @ApiModelProperty(value= "边缘库位") @TableField("out_most") private Integer outMost; @ApiModelProperty(value= "") @TableField("sheet_no") private String sheetNo; /** * 优先级 */ @ApiModelProperty(value= "优先级") @TableField("io_pri") private Double ioPri; @ApiModelProperty(value= "") @TableField("wrk_date") private Date wrkDate; /** * 目标库位 @@ -130,112 +91,12 @@ @TableField("source_loc_no") private String sourceLocNo; @ApiModelProperty(value= "") @TableField("loc_sts") private String locSts; /** * 拣料 */ @ApiModelProperty(value= "拣料") private String picking; @ApiModelProperty(value= "") @TableField("link_mis") private String linkMis; @ApiModelProperty(value= "") @TableField("online_yn") private String onlineYn; @ApiModelProperty(value= "") @TableField("upd_mk") private String updMk; /** * 退出 */ @ApiModelProperty(value= "退出") @TableField("exit_mk") private String exitMk; @ApiModelProperty(value= "") @TableField("plt_type") private Integer pltType; /** * 空板 */ @ApiModelProperty(value= "空板") @TableField("empty_mk") private String emptyMk; /** * 工作时间 */ @ApiModelProperty(value= "工作时间") @TableField("io_time") private Date ioTime; @ApiModelProperty(value= "") @TableField("ctn_type") private Integer ctnType; @ApiModelProperty(value= "") private String packed; @ApiModelProperty(value= "") @TableField("ove_mk") private String oveMk; @ApiModelProperty(value= "") @TableField("mtn_type") private Double mtnType; @ApiModelProperty(value= "") @TableField("user_no") private String userNo; /** * 堆垛机启动时间 */ @ApiModelProperty(value= "堆垛机启动时间") @TableField("crn_str_time") private Date crnStrTime; /** * 堆垛机停止时间 */ @ApiModelProperty(value= "堆垛机停止时间") @TableField("crn_end_time") private Date crnEndTime; /** * 拣料时间 */ @ApiModelProperty(value= "拣料时间") @TableField("plc_str_time") private Date plcStrTime; @ApiModelProperty(value= "") @TableField("crn_pos_time") private Date crnPosTime; @ApiModelProperty(value= "") @TableField("load_time") private Double loadTime; @ApiModelProperty(value= "") @TableField("exp_time") private Double expTime; @ApiModelProperty(value= "") @TableField("ref_wrkno") private Double refWrkno; @ApiModelProperty(value= "") @TableField("ref_iotime") private Date refIotime; /** * 修改人员 @@ -266,10 +127,6 @@ private Date appeTime; @ApiModelProperty(value= "") @TableField("pause_mk") private String pauseMk; @ApiModelProperty(value= "") @TableField("error_time") private Date errorTime; @@ -278,32 +135,8 @@ private String errorMemo; @ApiModelProperty(value= "") @TableField("ctn_kind") private Integer ctnKind; @ApiModelProperty(value= "") @TableField("manu_type") private String manuType; @ApiModelProperty(value= "") @TableField("memo_m") private String memoM; @ApiModelProperty(value= "") @TableField("sc_weight") private Double scWeight; @ApiModelProperty(value= "") @TableField("log_mk") private String logMk; @ApiModelProperty(value= "") @TableField("log_err_time") private Date logErrTime; @ApiModelProperty(value= "") @TableField("log_err_memo") private String logErrMemo; /** * 条码 @@ -311,34 +144,25 @@ @ApiModelProperty(value= "条码") private String barcode; @ApiModelProperty(value= "") @TableField("Pdc_type") private String PdcType; @ApiModelProperty(value= "") @TableField("ctn_no") private String ctnNo; /** * 四向穿梭车号 */ @ApiModelProperty(value= "四向穿梭车号") @TableField(value = "shuttle_no") private Integer shuttleNo; /** * 满板 * 提升机号 */ @ApiModelProperty(value= "满板") @TableField("full_plt") private String fullPlt; @ApiModelProperty(value= "提升机号") @TableField(value = "lift_no") private Integer liftNo; /** * 先入品 / 双重入库 * WMS任务号 */ @ApiModelProperty(value= "先入品") @TableField("pre_have") private String preHave; /** * 空操作 / 取货无箱 */ @ApiModelProperty(value= "空操作") @TableField("take_none") private String takeNone; @ApiModelProperty(value= "WMS任务号") private String wmsWrkNo; public WrkMastLog() {} @@ -349,20 +173,6 @@ return String.valueOf(wrkMast.getWrkNo()); } return null; } public String getYmd$(){ if (Cools.isEmpty(this.ymd)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ymd); } public String getWrkDate$(){ if (Cools.isEmpty(this.wrkDate)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.wrkDate); } public String getLocNo$(){ @@ -408,42 +218,6 @@ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime); } public String getCrnStrTime$(){ if (Cools.isEmpty(this.crnStrTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnStrTime); } public String getCrnEndTime$(){ if (Cools.isEmpty(this.crnEndTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnEndTime); } public String getPlcStrTime$(){ if (Cools.isEmpty(this.plcStrTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.plcStrTime); } public String getCrnPosTime$(){ if (Cools.isEmpty(this.crnPosTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnPosTime); } public String getRefIotime$(){ if (Cools.isEmpty(this.refIotime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.refIotime); } public String getModiUser$(){ UserService service = SpringUtils.getBean(UserService.class); User user = service.selectById(this.modiUser); @@ -483,12 +257,8 @@ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.errorTime); } public String getLogErrTime$(){ if (Cools.isEmpty(this.logErrTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.logErrTime); public void sync(Object source) { Synchro.Copy(source, this); } } src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java
@@ -2,17 +2,11 @@ import com.baomidou.mybatisplus.mapper.BaseMapper; import com.zy.asrs.entity.WrkMastLog; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @Mapper @Repository public interface WrkMastLogMapper extends BaseMapper<WrkMastLog> { @Insert("insert into asr_wrk_mast_log select * from asr_wrk_mast where wrk_no=#{workNo}") int save(Integer workNo); WrkMastLog selectLatestByWorkNo(Integer workNo); } src/main/java/com/zy/asrs/service/WrkMastLogService.java
New file @@ -0,0 +1,10 @@ package com.zy.asrs.service; import com.baomidou.mybatisplus.service.IService; import com.zy.asrs.entity.WrkMastLog; public interface WrkMastLogService extends IService<WrkMastLog> { boolean save(Integer wrkNo); } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -867,17 +867,6 @@ } if (wrkMastService.updateById(wrkMast)) { if (wrkMast.getWrkSts() == 111) { // 保存工作主档历史档 if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) { log.info("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo()); } // 删除工作主档 if (!wrkMastService.deleteById(wrkMast)) { log.info("删除工作主档[workNo={0}]失败", wrkMast.getWrkNo()); } } //设置四向穿梭车为空闲状态 shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE); News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); @@ -2283,17 +2272,6 @@ wrkMast.setLiftNo(null);//释放提升机 wrkMast.setModiTime(now); wrkMastService.updateById(wrkMast); if (wrkMast.getWrkSts() == WrkStsType.COMPLETE_MOVE.sts) { // 保存工作主档历史档 if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) { log.info("保存工作历史档[workNo={}]失败", wrkMast.getWrkNo()); } // 删除工作主档 if (!wrkMastService.deleteById(wrkMast)) { log.info("删除工作主档[workNo={}]失败", wrkMast.getWrkNo()); } } return false; } src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
New file @@ -0,0 +1,30 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.entity.WrkMastLog; import com.zy.asrs.mapper.WrkMastLogMapper; import com.zy.asrs.service.WrkMastLogService; import com.zy.asrs.service.WrkMastService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service("wrkMastLogService") public class WrkMastLogServiceImpl extends ServiceImpl<WrkMastLogMapper, WrkMastLog> implements WrkMastLogService { @Autowired private WrkMastService wrkMastService; @Override public boolean save(Integer wrkNo) { WrkMast wrkMast = wrkMastService.selectByWorkNo(wrkNo); if (wrkMast == null) { return false; } WrkMastLog wrkMastLog = new WrkMastLog(); wrkMastLog.sync(wrkMast); return this.baseMapper.insert(wrkMastLog) > 0; } } src/main/java/com/zy/asrs/task/DevpReadScheduler.java
File was deleted src/main/java/com/zy/asrs/task/WrkMastScheduler.java
New file @@ -0,0 +1,44 @@ package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.WrkMastLogService; import com.zy.asrs.service.WrkMastService; import com.zy.core.enums.WrkStsType; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.List; @Component @Slf4j public class WrkMastScheduler { @Autowired private WrkMastService wrkMastService; @Autowired private WrkMastLogService wrkMastLogService; @Scheduled(cron = "0/1 * * * * ? ") private void executeMove(){ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.COMPLETE_MOVE.sts)); if (wrkMasts.isEmpty()) { return; } for (WrkMast wrkMast : wrkMasts) { // 保存工作主档历史档 if (!wrkMastLogService.save(wrkMast.getWrkNo())) { log.info("保存工作历史档[workNo={}]失败", wrkMast.getWrkNo()); } // 删除工作主档 if (!wrkMastService.deleteById(wrkMast)) { log.info("删除工作主档[workNo={}]失败", wrkMast.getWrkNo()); } } } } src/main/java/com/zy/common/service/CommonService.java
@@ -2,11 +2,17 @@ import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.domain.param.CancelTaskParam; import com.zy.asrs.domain.param.CompleteTaskParam; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; import com.zy.core.enums.WrkIoType; import com.zy.core.enums.WrkStsType; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; @Slf4j @Service @@ -14,6 +20,8 @@ @Autowired private WrkMastService wrkMastService; @Autowired private WrkMastLogService wrkMastLogService; @Autowired private WrkLastnoService wrkLastnoService; @@ -69,4 +77,38 @@ } } public boolean completeTask(CompleteTaskParam param) { Integer wrkNo = param.getWrkNo(); WrkMast wrkMast = wrkMastService.selectByWorkNo(wrkNo); if (null == wrkMast) { throw new CoolException("任务不存在"); } if (wrkMast.getIoType() == WrkIoType.IN.id) { wrkMast.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts); }else if (wrkMast.getIoType() == WrkIoType.OUT.id) { wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts); } else if (wrkMast.getIoType() == WrkIoType.SHUTTLE_MOVE.id) { wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts); } else if (wrkMast.getIoType() == WrkIoType.SHUTTLE_CHARGE.id) { wrkMast.setWrkSts(WrkStsType.COMPLETE_CHARGE.sts); } wrkMast.setModiTime(new Date()); wrkMastService.updateById(wrkMast); return true; } public boolean cancelTask(CancelTaskParam param) { Integer wrkNo = param.getWrkNo(); WrkMast wrkMast = wrkMastService.selectByWorkNo(wrkNo); if (null == wrkMast) { throw new CoolException("任务不存在"); } wrkMastLogService.save(wrkNo); wrkMastService.deleteById(wrkNo); return true; } } src/main/java/com/zy/common/web/BaseController.java
@@ -1,5 +1,7 @@ package com.zy.common.web; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.controller.AbstractBaseController; @@ -11,11 +13,17 @@ import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; import java.util.Set; /** * Created by vincent on 2019-09-09 */ public class BaseController extends AbstractBaseController { protected static final String RANGE_TIME_LINK = " - "; @Autowired protected HttpServletRequest request; @@ -43,4 +51,45 @@ } return ""; } /** * 全字段模糊搜索 * @param cls 模型类 * @param set 排除字段集合 * @param condition 搜索内容 */ protected <T> void allLike(Class<T> cls, Set<String> set, EntityWrapper<T> wrapper, String condition){ if (Cools.isEmpty(condition)) { return; } List<String> columns = new ArrayList<>(); for (Field field :Cools.getAllFields(cls)){ if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers()) || Modifier.isTransient(field.getModifiers())){ continue; } String column = null; if (field.isAnnotationPresent(TableField.class)) { column = field.getAnnotation(TableField.class).value(); } if (Cools.isEmpty(column)) { column = field.getName(); } if (!set.contains(column)) { columns.add(column); } } if (columns.isEmpty()) { return; } for (int i=0;i<columns.size();i++){ if (i==0){ wrapper.andNew(); } else { wrapper.or(); } wrapper.like(columns.get(i), condition); } } } src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
@@ -249,7 +249,7 @@ } // 获取工作号 int workNo = commonService.getWorkNo(0); int workNo = commonService.getWorkNo(WrkIoType.SHUTTLE_MOVE.id); // 保存工作档 WrkMast wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); src/main/resources/mapper/WrkMastLogMapper.xml
@@ -6,73 +6,26 @@ <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkMastLog"> <id column="id" property="id" /> <result column="wrk_no" property="wrkNo" /> <result column="inv_wh" property="invWh" /> <result column="ymd" property="ymd" /> <result column="mk" property="mk" /> <result column="whs_type" property="whsType" /> <result column="wrk_sts" property="wrkSts" /> <result column="io_type" property="ioType" /> <result column="crn_no" property="crnNo" /> <result column="ste_no" property="steNo" /> <result column="out_most" property="outMost" /> <result column="sheet_no" property="sheetNo" /> <result column="io_pri" property="ioPri" /> <result column="wrk_date" property="wrkDate" /> <result column="loc_no" property="locNo" /> <result column="sta_no" property="staNo" /> <result column="source_sta_no" property="sourceStaNo" /> <result column="source_loc_no" property="sourceLocNo" /> <result column="loc_sts" property="locSts" /> <result column="picking" property="picking" /> <result column="link_mis" property="linkMis" /> <result column="online_yn" property="onlineYn" /> <result column="upd_mk" property="updMk" /> <result column="exit_mk" property="exitMk" /> <result column="plt_type" property="pltType" /> <result column="empty_mk" property="emptyMk" /> <result column="io_time" property="ioTime" /> <result column="ctn_type" property="ctnType" /> <result column="packed" property="packed" /> <result column="ove_mk" property="oveMk" /> <result column="mtn_type" property="mtnType" /> <result column="user_no" property="userNo" /> <result column="crn_str_time" property="crnStrTime" /> <result column="crn_end_time" property="crnEndTime" /> <result column="plc_str_time" property="plcStrTime" /> <result column="crn_pos_time" property="crnPosTime" /> <result column="load_time" property="loadTime" /> <result column="exp_time" property="expTime" /> <result column="ref_wrkno" property="refWrkno" /> <result column="ref_iotime" property="refIotime" /> <result column="modi_user" property="modiUser" /> <result column="modi_time" property="modiTime" /> <result column="appe_user" property="appeUser" /> <result column="appe_time" property="appeTime" /> <result column="pause_mk" property="pauseMk" /> <result column="error_time" property="errorTime" /> <result column="error_memo" property="errorMemo" /> <result column="ctn_kind" property="ctnKind" /> <result column="manu_type" property="manuType" /> <result column="memo_m" property="memoM" /> <result column="sc_weight" property="scWeight" /> <result column="log_mk" property="logMk" /> <result column="log_err_time" property="logErrTime" /> <result column="log_err_memo" property="logErrMemo" /> <result column="barcode" property="barcode" /> <result column="Pdc_type" property="PdcType" /> <result column="ctn_no" property="ctnNo" /> <result column="full_plt" property="fullPlt" /> <result column="pre_have" property="preHave" /> <result column="take_none" property="takeNone" /> <result column="lift_no" property="liftNo" /> <result column="shuttle_no" property="shuttleNo" /> <result column="wms_wrk_no" property="wmsWrkNo" /> </resultMap> <select id="selectLatestByWorkNo" resultMap="BaseResultMap"> select top 1 * from asr_wrk_mast_log wml,(select top 1 io_time,wrk_no from asr_wrk_mast_log where wrk_no = #{workNo} group by io_time,wrk_no order by io_time desc) a where wml.wrk_no = a.wrk_no and wml.io_time = a.io_time </select> </mapper> src/main/resources/mapper/WrkMastMapper.xml
@@ -9,7 +9,6 @@ <result column="wrk_sts" property="wrkSts" /> <result column="io_type" property="ioType" /> <result column="io_pri" property="ioPri" /> <result column="wrk_date" property="wrkDate" /> <result column="loc_no" property="locNo" /> <result column="sta_no" property="staNo" /> <result column="source_sta_no" property="sourceStaNo" /> @@ -25,6 +24,7 @@ <result column="barcode" property="barcode" /> <result column="shuttle_no" property="shuttleNo" /> <result column="lift_no" property="liftNo" /> <result column="wms_wrk_no" property="wmsWrkNo" /> </resultMap> src/main/webapp/views/index.html
@@ -23,6 +23,7 @@ <li><a id="lift" onclick="nav(this.id)" class="nav-unselect" href="#">提升机</a></li> <!-- <li><a id="ste" onclick="nav(this.id)" class="nav-unselect" href="#">穿梭车</a></li>--> <li><a id="shuttle" onclick="nav(this.id)" class="nav-unselect" href="#">四向穿梭车</a></li> <li><a id="task" onclick="nav(this.id)" class="nav-unselect" href="#">任务管理</a></li> </ul> </div> </div> src/main/webapp/views/task.html
New file @@ -0,0 +1,323 @@ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>任务管理</title> <link rel="stylesheet" href="../static/vue/element/element.css"> <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="../static/layui/layui.js"></script> <script type="text/javascript" src="../static/js/common.js"></script> <script type="text/javascript" src="../static/vue/js/vue.min.js"></script> <script type="text/javascript" src="../static/vue/element/element.js"></script> </head> <body> <div id="app" style="display: flex;justify-content: center;flex-wrap: wrap;"> <div style="width: 100%;"> <el-card class="box-card"> <el-form :inline="true" :model="tableSearchParam" class="demo-form-inline"> <el-form-item label=""> <el-input v-model="tableSearchParam.wrk_no" placeholder="请输入工作号"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="getTableData">查询</el-button> <el-button type="primary" @click="resetParam">重置</el-button> </el-form-item> </el-form> <el-table ref="singleTable" :data="tableData" style="width: 100%;"> <el-table-column property="wrkNo" label="工作号"> </el-table-column> <el-table-column property="wmsWrkNo" label="WMS任务号"> </el-table-column> <el-table-column property="wrkSts$" label="工作状态"> </el-table-column> <el-table-column property="ioType$" label="任务类型"> </el-table-column> <el-table-column property="ioPri" label="优先级"> </el-table-column> <el-table-column property="sourceStaNo" label="源站"> </el-table-column> <el-table-column property="staNo" label="目标站"> </el-table-column> <el-table-column property="sourceLocNo" label="源库位"> </el-table-column> <el-table-column property="locNo" label="目标库位"> </el-table-column> <el-table-column property="barcode" label="托盘码"> </el-table-column> <el-table-column property="liftNo" label="提升机"> </el-table-column> <el-table-column property="shuttleNo" label="穿梭车"> </el-table-column> <el-table-column label="操作" width="100"> <template slot-scope="scope"> <el-dropdown @command="(command)=>{handleCommand(command, scope.row)}"> <el-button icon="el-icon-more" size="mini" type="primary"></el-button> <el-dropdown-menu slot="dropdown"> <!-- <el-dropdown-item command="change">修改</el-dropdown-item>--> <el-dropdown-item command="complete">完成</el-dropdown-item> <el-dropdown-item command="cancel">取消</el-dropdown-item> <el-dropdown-item command="shuttleCommand">穿梭车指令</el-dropdown-item> </el-dropdown-menu> </el-dropdown> </template> </el-table-column> </el-table> <div style="margin-top: 10px;"> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="pageSizes" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="pageTotal"> </el-pagination> </div> </el-card> </div> <el-dialog :title="taskWrkFormTitle" :visible.sync="taskWrkFormVisible"> <el-form :model="taskWrkForm"> <el-form-item label="站点状态" :label-width="taskWrkFormLabelWidth"> <el-select v-model="taskWrkForm.siteStatus" placeholder="站点状态"> <el-option label="无托盘" value="1"></el-option> <el-option label="空盘头" value="2"></el-option> <el-option label="满盘头" value="3"></el-option> <el-option label="空托盘" value="4"></el-option> <el-option label="托盘入站中" value="5"></el-option> <el-option label="托盘出站中" value="6"></el-option> <el-option label="禁用" value="7"></el-option> </el-select> </el-form-item> <el-form-item label="物料号" :label-width="taskWrkFormLabelWidth"> <el-input v-model="taskWrkForm.matnr" autocomplete="off"></el-input> </el-form-item> <el-form-item label="工作号" :label-width="taskWrkFormLabelWidth"> <el-input v-model="taskWrkForm.wrkNo" autocomplete="off"></el-input> </el-form-item> <el-form-item label="托盘码" :label-width="taskWrkFormLabelWidth"> <el-input v-model="taskWrkForm.barcode" autocomplete="off"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="taskWrkFormVisible = false">取 消</el-button> <el-button type="primary" @click="taskWrkFormConfirm">确 定</el-button> </div> </el-dialog> </div> <script> var $layui = layui.config({ base: baseUrl + "/static/wms/layui/lay/modules/" }).use(['layer', 'form'], function() {}) var app = new Vue({ el: '#app', data: { tableData: [], currentPage: 1, pageSizes: [16, 30, 50, 100, 150, 200], pageSize: 30, pageTotal: 0, tableSearchParam: { wrk_no: null, }, taskWrkFormVisible: false, taskWrkForm: { siteStatus: '1', matnr: '', wrkNo: '', barcode: '', }, taskWrkFormLabelWidth: '80px', taskWrkFormTitle: '' }, created() { this.init() }, methods: { init() { this.getTableData() }, getTableData() { let that = this; let data = JSON.parse(JSON.stringify(this.tableSearchParam)) data.curr = this.currentPage data.limit = this.pageSize if (this.tableSearchParam.datetime != null) { data.datetime = null data.create_time = this.tableSearchParam.datetime[0] + " - " + this.tableSearchParam.datetime[1] } $.ajax({ url: baseUrl + "/wrkMast/list/auth", headers: { 'token': localStorage.getItem('token') }, data: data, dataType: 'json', contentType: 'application/json;charset=UTF-8', method: 'GET', success: function(res) { if (res.code == 200) { that.tableData = res.data.records that.pageTotal = res.data.total } else if (res.code === 403) { top.location.href = baseUrl + "/"; } else { that.$message({ message: res.msg, type: 'error' }); } } }); }, handleSizeChange(val) { console.log(`每页 ${val} 条`); this.pageSize = val this.getTableData() }, handleCurrentChange(val) { console.log(`当前页: ${val}`); this.currentPage = val this.getTableData() }, resetParam() { this.tableSearchParam = { task_no: null, status: null, wrk_no: null } this.getTableData() }, handleCommand(command, row) { switch (command) { case "complete": this.completeTask(row) break; case "cancel": this.cancelTask(row) break; } }, completeTask(row) { let that = this this.$confirm('确定完成该任务吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { $.ajax({ url: baseUrl + "/openapi/completeTask", contentType: 'application/json', headers: { 'token': localStorage.getItem('token') }, data: JSON.stringify({ wrkNo: row.wrkNo, }), method: 'POST', success: function(res) { if (res.code == 200) { that.$message({ message: "完成成功", type: 'success' }); that.getTableData() } else if (res.code === 403) { top.location.href = baseUrl + "/"; } else { that.$message({ message: res.msg, type: 'error' }); } } }); }).catch(() => { // this.$message({ // type: 'info', // message: '已取消删除' // }); }); }, cancelTask(row) { let that = this this.$confirm('确定取消该任务吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { $.ajax({ url: baseUrl + "/openapi/cancelTask", contentType: 'application/json', headers: { 'token': localStorage.getItem('token') }, data: JSON.stringify({ wrkNo: row.wrkNo, }), method: 'POST', success: function(res) { if (res.code == 200) { that.$message({ message: "取消成功", type: 'success' }); that.getTableData() } else if (res.code === 403) { top.location.href = baseUrl + "/"; } else { that.$message({ message: res.msg, type: 'error' }); } } }); }).catch(() => { // this.$message({ // type: 'info', // message: '已取消删除' // }); }); }, taskWrkFormConfirm() { //修改指定任务数据 let that = this $.ajax({ url: baseUrl + "/basCacheSite/update/auth", headers: { 'token': localStorage.getItem('token') }, data: { id: this.taskWrkForm.id, siteStatus: this.taskWrkForm.siteStatus, matnr: this.taskWrkForm.matnr, wrkNo: this.taskWrkForm.wrkNo, barcode: this.taskWrkForm.barcode, }, method: 'POST', success: function(res) { if (res.code == 200) { that.taskWrkFormVisible = false that.$message({ message: "更新成功", type: 'success' }); that.getTableData() } else if (res.code === 403) { top.location.href = baseUrl + "/"; } else { that.$message({ message: res.msg, type: 'error' }); } } }); }, }, }) </script> </body> </html>