Compare commits

...

2 Commits

Author SHA1 Message Date
lsymicc
38d27e3cf2 调整推送生成出库任务接口 2026-04-03 17:29:32 +08:00
lsymicc
3be86abb94 调整wms接口增加的字段 2026-04-03 08:57:32 +08:00
19 changed files with 340 additions and 547 deletions

View File

@@ -1,12 +1,16 @@
package com.ruoyi;
import com.ruoyi.job.service.IMydoJobService;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import javax.annotation.PostConstruct;
/**
* 启动程序
*
@@ -23,5 +27,6 @@ public class RuoYiApplication
// System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RuoYiApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ 福来瑞达WCS系统启动成功 ლ(´ڡ`ლ)゙ ");
}
}

View File

@@ -2,6 +2,7 @@ package com.ruoyi.api.controller;
import com.ruoyi.api.domain.wcs2wms.JobParam;
import com.ruoyi.api.domain.wcs2wms.ReceiveJob;
import com.ruoyi.api.domain.wcs2wms.stockout.StockoutReceive;
import com.ruoyi.api.service.IApiService;
import com.ruoyi.bas.port.domain.WcsPort;
import com.ruoyi.bas.port.service.IWcsPortService;
@@ -12,7 +13,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/wcs2Wms/api")
@RequestMapping("/wcs2wms/api")
public class Wcs2WmsController {
@Autowired
@@ -23,12 +24,12 @@ public class Wcs2WmsController {
/**
* 接收wms出库任务
*
* @param receiveOutJob
* @param stockoutReceive
* @return
*/
@PostMapping("/receiveOutMydoJob")
public AjaxResult receiveOutMydoJob(@RequestBody ReceiveJob receiveOutJob) {
return apiService.receiveOutMydoJob(receiveOutJob);
public AjaxResult receiveOutMydoJob(@RequestBody StockoutReceive stockoutReceive) {
return apiService.receiveOutMydoJob(stockoutReceive);
}
/**

View File

@@ -20,7 +20,7 @@ import lombok.NoArgsConstructor;
public class StockinReceive {
/**
* 系统生成的任务编号(唯一)
* 系统生成的任务编号(唯一)/wms下发的任务号
*/
private String taskCode;

View File

@@ -0,0 +1,38 @@
package com.ruoyi.api.domain.wcs2wms.stockout;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* wms推送出库请求参数
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StockoutReceive {
/**
* 请求时传入的 reqCode,原样回传
*/
private String reqCode;
/**
* wms下发的任务号
*/
private String taskCode;
/**
* 出库库位编号
*/
private String siteCode;
/**
* 任务类型编号
*/
private String taskTypeCode;
}

View File

@@ -12,6 +12,7 @@ import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskRespons
import com.ruoyi.api.domain.wcs2wms.JobParam;
import com.ruoyi.api.domain.wcs2wms.ReceiveJob;
import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionRequest;
import com.ruoyi.api.domain.wcs2wms.stockout.StockoutReceive;
import com.ruoyi.bas.port.domain.WcsPort;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.job.TaskException;
@@ -141,16 +142,16 @@ public interface IApiService
/**
* 入库请求生成作业
*/
public AjaxResult createInMydoJob(Map<String, Object> param);
AjaxResult createInMydoJob(Map<String, Object> param);
/**
* 入库请求作业异常反馈(扫码失败、外形、称重等异常)
*/
public AjaxResult createInMydoJobException(Map<String, Object> param);
AjaxResult createInMydoJobException(Map<String, Object> param);
public AjaxResult selectMydoJobByNoTrayCode(Map<String, Object> param);
AjaxResult selectMydoJobByNoTrayCode(Map<String, Object> param);
AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob);
AjaxResult receiveOutMydoJob(StockoutReceive stockoutReceive);
AjaxResult receiveInMydoJob(ReceiveJob receiveInJob);

View File

@@ -19,6 +19,7 @@ import com.ruoyi.api.domain.agv.genAgvSchedulingTask.PositionCodeData;
import com.ruoyi.api.domain.wcs2wms.JobParam;
import com.ruoyi.api.domain.wcs2wms.ReceiveJob;
import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionRequest;
import com.ruoyi.api.domain.wcs2wms.stockout.StockoutReceive;
import com.ruoyi.api.service.IApiService;
import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService;
import com.ruoyi.bas.port.domain.WcsPort;
@@ -34,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -150,7 +152,7 @@ public class ApiServiceImpl implements IApiService {
*/
@Override
public RequestLog finishMydoJob(Map<String, Object> param) {
return requestLogService.getRequestLog(JOB_FINISH_URL, "任务完成上报", JSONUtil.toJsonStr(param));
return requestLogService.getRequestLog(WMS_TASK_FINISH, "任务完成上报", JSONUtil.toJsonStr(param));
}
@@ -449,37 +451,42 @@ public class ApiServiceImpl implements IApiService {
@Override
public AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob) {
public AjaxResult receiveOutMydoJob(StockoutReceive stockoutReceive) {
//检查任务是否存在,避免重复生成
MydoJob job = new MydoJob();
job.setTaskNo(receiveOutJob.getTaskNo());
job.setWmsTaskNo(stockoutReceive.getTaskCode());
List<MydoJob> tasks = mydoJobService.selectMydoJobList(job);
//校验:任务已存在
if (tasks.size() != 0) {
log.info("【请求异常】wms下发出库任务失败,该任务已存在,单号:{},任务号:{}", receiveOutJob.getJobId(), receiveOutJob.getTaskNo());
return AjaxResult.error("【请求异常】wms下发出库任务失败,该任务已存在,单号:" + receiveOutJob.getJobId() + ",任务号:" + receiveOutJob.getTaskNo());
log.info("【请求异常】wms下发出库任务失败,该任务已存在,任务号:{}", stockoutReceive.getTaskCode());
return AjaxResult.error("【请求异常】wms下发出库任务失败,任务号:" + stockoutReceive.getTaskCode());
}
//生成出库作业
MydoJob mydoJob = new MydoJob();
mydoJob.setJobId(receiveOutJob.getJobId());
mydoJob.setTaskNo(receiveOutJob.getTaskNo());
mydoJob.setCargoSpaceId(receiveOutJob.getCargoSpaceId());
mydoJob.setJobId(mydoJobService.getJobId("CK"));
mydoJob.setTaskNo(mydoJobService.getTaskNo("3"));
mydoJob.setWmsTaskNo(stockoutReceive.getTaskCode());
//todo 可能需要解析货位 wms参数【siteCode】
mydoJob.setCargoSpaceId(stockoutReceive.getSiteCode());
mydoJob.setExitId("G1004");
mydoJob.setInOrOut(receiveOutJob.getInOrOut());
//todo 是否需要解析wms推送的任务类型?
// mydoJob.setInOrOut(stockoutReceive.getTaskTypeCode());
mydoJob.setInOrOut("2");
mydoJob.setStatus("1");
mydoJob.setPriority(Long.valueOf(10));
mydoJob.setTrayCode(receiveOutJob.getTrayCode());
mydoJob.setRoadwayId(receiveOutJob.getRoadwayId());
//todo 可能需要查本地库存信息获取条码?
// mydoJob.setTrayCode(receiveOutJob.getTrayCode());
mydoJob.setCreateTime(DateUtils.getNowDate());
mydoJob.setExecutionPhase(TASK_EP_CREATE);
// mydoJob.setTraySize(receiveOutJob.getDepartmentId());
int i = mydoJobService.insertMydoJob(mydoJob);
if (i > 0) {
// boolean success = mydoJobService.saveOrUpdate(mydoJob);
if (i != 0) {
return AjaxResult.success(
"【请求成功】wms下发出库作业,作业单号:" + receiveOutJob.getJobId() + ",任务号:" + receiveOutJob.getTaskNo() + ",出库货位:" + receiveOutJob.getCargoSpaceId());
"【请求成功】wms下发出库作业,下发任务号:" + stockoutReceive.getTaskCode() + ",出库货位:" + stockoutReceive.getSiteCode());
}else{
return AjaxResult.error();
}
@@ -576,6 +583,31 @@ public class ApiServiceImpl implements IApiService {
}
}
//// @PostConstruct
// void qwe() {
// HashMap<String, Object> map = new HashMap<>();
// map.put("v_param", "RK");
// mydoJobService.getJobId(map);
// String s = map.get("v_serial").toString();
// System.out.println(s);
//
//
// map.put("v_param", "CK");
// mydoJobService.getJobId(map);
// s = map.get("v_serial").toString();
// System.out.println(s);
//
// map.put("v_param", "2");
// mydoJobService.getTaskNo(map);
// s = map.get("v_serial").toString();
// System.out.println(s);
//
// map.put("v_param", "3");
// mydoJobService.getTaskNo(map);
// s = map.get("v_serial").toString();
// System.out.println(s);
//
// }
}

View File

@@ -30,7 +30,7 @@ public class Constant {
public static final String WMS_STOCKIN_MYDOJOB = WMS_BASE_URL + "/api/external/taskIssue";
/**
* 向wms请求任务回传url
* 出入库回传url
*/
public static final String WMS_TASK_FINISH = WMS_BASE_URL + "/api/external/taskIssue";

View File

@@ -104,7 +104,7 @@ public class JobCallBackController extends BaseController
return toAjax(jobCallBackService.deleteJobCallBackByIds(ids));
}
@Scheduled(fixedDelay=1500)
@Scheduled(fixedDelay=2000)
public void jobCallBack() {
jobCallBackService.jobCallBack();
}

View File

@@ -1,5 +1,9 @@
package com.ruoyi.job.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
@@ -11,6 +15,10 @@ import com.ruoyi.common.core.domain.BaseEntity;
* @author ruoyi
* @date 2025-09-25
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class JobCallBack extends BaseEntity
{
private static final long serialVersionUID = 1L;
@@ -34,110 +42,17 @@ public class JobCallBack extends BaseEntity
@Excel(name = "状态")
private String status;
/** 备用字段1 */
@Excel(name = "备用字段1")
private String spare1;
/** wms任务类型编号 */
@Excel(name = "wms任务类型编号")
private String taskTypeCode;
/** 备用字段2 */
@Excel(name = "备用字段2")
private String spare2;
/** 请求唯一编号,原样回传到响应中,便于追踪 */
@Excel(name = "请求唯一编号")
private String reqCode;
/** 备用字段3 */
@Excel(name = "备用字段3")
private String spare3;
/** wms任务编号 */
@Excel(name = "wms任务编号")
private String taskCode;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setType(String type)
{
this.type = type;
}
public String getType()
{
return type;
}
public void setTaskNo(Long taskNo)
{
this.taskNo = taskNo;
}
public Long getTaskNo()
{
return taskNo;
}
public void setMydojobId(String mydojobId)
{
this.mydojobId = mydojobId;
}
public String getMydojobId()
{
return mydojobId;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setSpare1(String spare1)
{
this.spare1 = spare1;
}
public String getSpare1()
{
return spare1;
}
public void setSpare2(String spare2)
{
this.spare2 = spare2;
}
public String getSpare2()
{
return spare2;
}
public void setSpare3(String spare3)
{
this.spare3 = spare3;
}
public String getSpare3()
{
return spare3;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("type", getType())
.append("taskNo", getTaskNo())
.append("mydojobId", getMydojobId())
.append("status", getStatus())
.append("createTime", getCreateTime())
.append("spare1", getSpare1())
.append("spare2", getSpare2())
.append("spare3", getSpare3())
.toString();
}
}

View File

@@ -1,5 +1,7 @@
package com.ruoyi.job.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -21,11 +23,13 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@ToString
//@TableName("mydo_job_wcs")
public class MydoJob extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 任务ID */
// @TableId
private String jobId;
/** 任务状态 */
@@ -90,11 +94,17 @@ public class MydoJob extends BaseEntity
private String trayCode;
private String inOut;
// private String inOut;
private String flag;
private String traySize;
private List<String> epList;
/**
* wms下发的任务号
*/
@Excel(name = "wms任务号")
private String wmsTaskNo;
}

View File

@@ -2,6 +2,8 @@ package com.ruoyi.job.mapper;
import java.util.HashMap;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.job.domain.MydoJob;
import org.apache.ibatis.annotations.Param;
@@ -11,7 +13,7 @@ import org.apache.ibatis.annotations.Param;
* @author ruoyi
* @date 2025-09-22
*/
public interface MydoJobMapper
public interface MydoJobMapper extends BaseMapper<MydoJob>
{
/**
* 查询作业信息
@@ -100,4 +102,19 @@ public interface MydoJobMapper
List<MydoJob> getInJobByEntranceId(@Param("entranceId") String exitId);
MydoJob selectMydoJobByExitId(@Param("exitId") String exitId);
/**
* 获取本地生成作业号
* @param map
* @return
*/
void getJobId(HashMap<String, Object> map);
/**
* 获取本地生成的任务号
* @param map
* @return
*/
void getTaskNo(HashMap<String, Object> map);
}

View File

@@ -1,9 +1,13 @@
package com.ruoyi.job.service;
import java.util.HashMap;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.job.domain.MydoJob;
import org.apache.ibatis.annotations.Param;
/**
* 作业信息Service接口
@@ -11,7 +15,7 @@ import com.ruoyi.job.domain.MydoJob;
* @author ruoyi
* @date 2025-09-22
*/
public interface IMydoJobService
public interface IMydoJobService extends IService<MydoJob>
{
/**
* 查询作业信息
@@ -93,4 +97,19 @@ public interface IMydoJobService
List<MydoJob> getInJobByEntranceId(String exitId);
MydoJob selectMydoJobByExitId(String exitId);
/**
* 获取本地生成作业号
* @param type RK-入库 CK-出库
* @return
*/
String getJobId(String type);
/**
* 获取本地生成任务号
* @param type 2-入库 3-出库
* @return
*/
String getTaskNo(String type);
}

View File

@@ -103,39 +103,46 @@ public class JobCallBackServiceImpl implements IJobCallBackService
@Override
public void jobCallBack() {
// List<JobCallBack> jobCallBackList = jobCallBackMapper.selectJobCallBackListNoSuccess();
// for (JobCallBack jobCallBack : jobCallBackList) {
//获取【刚刚创建】和【请求失败】的回传记录
List<JobCallBack> jobCallBackList = jobCallBackMapper.selectJobCallBackListNoSuccess();
for (JobCallBack jobCallBack : jobCallBackList) {
//设定请求参数
Map<String, Object> param = new HashMap<>();
param.put("taskTypeCode", jobCallBack.getTaskTypeCode());
param.put("reqCode", jobCallBack.getReqCode());
param.put("taskCode", jobCallBack.getTaskCode());
//请求回传
RequestLog requestLog = apiService.finishMydoJob(param);
if ("0".equals(requestLog.getIsSuccessful())){
jobCallBack.setStatus("1");
}else{
jobCallBack.setStatus("99");
}
jobCallBackMapper.updateJobCallBack(jobCallBack);
}
// List<JobCallBack> list = jobCallBackMapper.getTopJobCallBack();
// if(list != null && list.size() > 0){
// JobCallBack jobCallBack = list.get(0);
// Map<String, Object> param = new HashMap<>();
// param.put("jobId", jobCallBack.getMydojobId());
// param.put("taskNo", jobCallBack.getTaskNo());
// param.put("wmsType", jobCallBack.getType());
// RequestLog requestLog = apiService.finishMydoJob(param);
// if ("1".equals(requestLog.getIsSuccessful())){
// if ("0".equals(requestLog.getIsSuccessful())){
// jobCallBack.setStatus("1");
// jobCallBackMapper.updateJobCallBack(jobCallBack);
// }else{
// if(Integer.parseInt(jobCallBack.getSpare1()) < 2){
// jobCallBack.setSpare1(String.valueOf(Integer.parseInt(jobCallBack.getSpare1())+1));
// jobCallBackMapper.updateJobCallBack(jobCallBack);
// }else{
// jobCallBack.setStatus("2");
// jobCallBackMapper.updateJobCallBack(jobCallBack);
// }
// }
// }
List<JobCallBack> list = jobCallBackMapper.getTopJobCallBack();
if(list != null && list.size() > 0){
JobCallBack jobCallBack = list.get(0);
Map<String, Object> param = new HashMap<>();
param.put("jobId", jobCallBack.getMydojobId());
param.put("taskNo", jobCallBack.getTaskNo());
param.put("wmsType", jobCallBack.getType());
RequestLog requestLog = apiService.finishMydoJob(param);
if ("0".equals(requestLog.getIsSuccessful())){
jobCallBack.setStatus("1");
jobCallBackMapper.updateJobCallBack(jobCallBack);
}else{
if(Integer.parseInt(jobCallBack.getSpare1()) < 2){
jobCallBack.setSpare1(String.valueOf(Integer.parseInt(jobCallBack.getSpare1())+1));
jobCallBackMapper.updateJobCallBack(jobCallBack);
}else{
jobCallBack.setStatus("2");
jobCallBackMapper.updateJobCallBack(jobCallBack);
}
}
}
}
}

View File

@@ -1,11 +1,14 @@
package com.ruoyi.job.service.impl;
import java.io.Serializable;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.job.domain.JobCallBack;
@@ -16,6 +19,8 @@ import com.ruoyi.job.mapper.MydoJobMapper;
import com.ruoyi.job.domain.MydoJob;
import com.ruoyi.job.service.IMydoJobService;
import javax.annotation.PostConstruct;
/**
* 作业信息Service业务层处理
*
@@ -23,7 +28,7 @@ import com.ruoyi.job.service.IMydoJobService;
* @date 2025-09-22
*/
@Service
public class MydoJobServiceImpl implements IMydoJobService
public class MydoJobServiceImpl extends ServiceImpl<MydoJobMapper, MydoJob> implements IMydoJobService
{
@Autowired
private MydoJobMapper mydoJobMapper;
@@ -171,7 +176,7 @@ public class MydoJobServiceImpl implements IMydoJobService
}
/**
* 手动处理同一【作业单号】的作业
* 手动完成同一【作业单号】的作业
* 如果【jobid】和【taskno】是一对多的情况,使用上一个方法<OuthandFinish>手动完成作业会导致整个【jobid】单据完成回传
* @param jobIds
* @return
@@ -180,19 +185,33 @@ public class MydoJobServiceImpl implements IMydoJobService
public AjaxResult OuthandFinish(String[] jobIds) {
//获取所有符合【任务单号】的作业
for (String jobId : jobIds) {
//todo 是否需要校验响应成功后再执行历史表操作
//插入历史表
mydoJobMapper.insertHistory(jobId);
//生成回传记录的参数
MydoJob mydoJob = mydoJobMapper.selectMydoJobByJobId(jobId);
JobCallBack jobCallBack = new JobCallBack();
long jobIdNum = Long.parseLong(mydoJob.getInOrOut());
if (jobIdNum > 20){
jobCallBack.setType("2");
}else{jobCallBack.setType("1");}
}else{
jobCallBack.setType("1");
}
jobCallBack.setMydojobId(mydoJob.getJobId());
jobCallBack.setStatus("0");
jobCallBack.setTaskNo(Convert.toLong(mydoJob.getTaskNo()));
jobCallBack.setCreateTime(new Date());
jobCallBack.setSpare1("0");
jobCallBack.setTaskCode(mydoJob.getWmsTaskNo());
// jobCallBack.setTaskTypeCode();//todo wms下发的任务类型
jobCallBack.setReqCode(mydoJob.getJobId() + mydoJob.getTaskNo());
// jobCallBack.setSpare1("0");
jobCallBackService.insertJobCallBack(jobCallBack);
//移除实时任务
mydoJobMapper.deleteMydoJobByJobId(jobId);
}
@@ -201,14 +220,15 @@ public class MydoJobServiceImpl implements IMydoJobService
/**
* 手动处理指定批量【任务号】的作业
* >>需要确定【jobid】是否由wms下发
* >>如果【jobid】和【taskno】是一对多的情况,使用上一个方法<OuthandFinish>手动完成作业会导致整个【jobid】单据完成回传
* >>如果【jobid】和【taskno】是一对一的情况,则直接使用 <OuthandFinish> 方法手动完成即可
* @param taskNos
* @return
*/
@Override
public AjaxResult ManuelTaskFinish(String[] taskNos) {
//todo 需要确定【jobid】是否由wms下发
// 如果【jobid】和【taskno】是一对多的情况,使用上一个方法<OuthandFinish>手动完成作业会导致整个【jobid】单据完成回传
// 如果【jobid】和【taskno】是一对一的情况,则直接使用<OuthandFinish>方法手动完成即可
//获取所有符合【任务号】的作业
for (String taskNo : taskNos) {
MydoJob mydoJob = mydoJobMapper.selectMydoJobByTaskNo(taskNo);
@@ -224,7 +244,8 @@ public class MydoJobServiceImpl implements IMydoJobService
jobCallBack.setStatus("0");
jobCallBack.setTaskNo(Convert.toLong(taskNo));
jobCallBack.setCreateTime(new Date());
jobCallBack.setSpare1("0");
// jobCallBack.setSpare1("0");
jobCallBackService.insertJobCallBack(jobCallBack);
mydoJobMapper.deleteMydoJobByTaskNo(taskNo);
}
@@ -262,4 +283,33 @@ public class MydoJobServiceImpl implements IMydoJobService
return mydoJobMapper.selectJobByTaskNo(taskNo);
}
/**
* 获取本地生成作业号
* @param type RK-入库 CK-出库
* @return
*/
@Override
public String getJobId(String type) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_param", type);
mydoJobMapper.getJobId(map);
return map.get("v_serial").toString();
}
/**
* 获取本地生成任务号
* @param type 2-入库 3-出库
* @return
*/
@Override
public String getTaskNo(String type) {
HashMap<String, Object> map = new HashMap<>();
map.put("v_param", type);
mydoJobMapper.getTaskNo(map);
return map.get("v_serial").toString();
}
}

View File

@@ -7,6 +7,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.ObjUtil;
import com.ruoyi.api.domain.wcs2wms.JobParam;
import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionReceive;
import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionRequest;
import com.ruoyi.api.service.IApiService;
import com.ruoyi.bas.cargospace.domain.BasCargoSpace;
@@ -155,19 +156,26 @@ public class DdjThread implements Runnable {
TaskExceptionRequest taskExceptionRequest = new TaskExceptionRequest();
taskExceptionRequest.setTaskClass(mydoJob.getInOrOut());
taskExceptionRequest.setType(TASK_EXCEPTION_STOCKIN_OCCUPIED);
taskExceptionRequest.setTaskCode(String.valueOf(mydoJob));
taskExceptionRequest.setTaskCode(mydoJob.getWmsTaskNo());
taskExceptionRequest.setTaskTypeCode("");//todo 不知道填什么内容
taskExceptionRequest.setReqCode(UUID.randomUUID().toString());
taskExceptionRequest.setReqCode(mydoJob.getJobId() + mydoJob.getTaskNo());
taskExceptionRequest.setAdverseCauses("当前位置已有货物,盘点后重新分配货位");
AjaxResult ajaxResult = apiService.reAssign(taskExceptionRequest);
if (ajaxResult.isSuccess()){
//获取返回的新货位
MydoJob mydoJobReAssign = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class);
//获取返回的任务号和新分配的货位
TaskExceptionReceive mydoJobReAssign = BeanUtil.toBean(ajaxResult.get("result"), TaskExceptionReceive.class);
MydoJob wmsJob = new MydoJob();
wmsJob.setInOrOut(mydoJobReAssign.getTaskCode());
if (mydoJobService.selectMydoJobList(wmsJob).size() == 0) {
log.warn("该任务不存在,任务号:{}", mydoJobReAssign.getTaskCode());
return;
}
//更新任务参数
mydoJob = mydoJobService.selectMydoJobByTaskNo(rwh);
mydoJob.setCargoSpaceId(mydoJobReAssign.getCargoSpaceId());
mydoJob.setCargoSpaceId(mydoJobReAssign.getSiteCode());
mydoJob.setFaultFlag("2");
mydoJobService.updateMydoJob(mydoJob);
@@ -209,8 +217,8 @@ public class DdjThread implements Runnable {
//作废作业
InvalidMydoJob(rwh, ddj.getId());
//重置【取货无货】的出库异常货位库存信息
// basCargoSpaceService.resetCargoSpaceByStockoutException(mydoJob.getCargoSpaceId());
//清空/重置【取货无货】的出库异常货位库存信息
basCargoSpaceService.resetCargoSpaceByStockoutException(mydoJob.getCargoSpaceId());
}
}
}

View File

@@ -1,337 +0,0 @@
package com.ruoyi.schedule.scheduleTask.ssj;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.api.service.IApiService;
import com.ruoyi.bas.port.service.IWcsPortService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.device.ssj.domain.DeviceSsj;
import com.ruoyi.job.domain.MydoJob;
import com.ruoyi.job.service.IMydoJobService;
import com.ruoyi.queue.agv.domain.AgvQueue;
import com.ruoyi.queue.agv.service.IAgvQueueService;
import lombok.extern.slf4j.Slf4j;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static com.ruoyi.common.TaskStatusCode.*;
import static com.ruoyi.schedule.plcRead.ssj.PlcSsjRead.*;
/**
* 生产线输送机
* 生产线线程 检测到位+托盘条码+托盘大小 请求wms生成入库作业 。 循环作业表,检测有没有出库作业 ,生成agv搬运作业。
*/
@Slf4j
public class LineConvThread implements Runnable {
public HashMap<String, List<String>> ssjCodeList;
private IApiService apiService;
private IAgvQueueService agvQueueService;
private IMydoJobService mydoJobService;
private IWcsPortService wcsPortService;
public boolean isRun = true;
public void init() {
ssjCodeList = new HashMap<>();
ArrayList<String> ssjCodes = new ArrayList<>();
ssjCodes.add("G1005");
ssjCodeList.put("line", ssjCodes);
apiService = SpringUtils.getBean(IApiService.class);
agvQueueService = SpringUtils.getBean(IAgvQueueService.class);
mydoJobService = SpringUtils.getBean(IMydoJobService.class);
wcsPortService = SpringUtils.getBean(IWcsPortService.class);
log.info("初始化服务 {},{}", apiService, agvQueueService);
}
@Override
public void run() {
init();
while (isRun) {
for (String type : ssjCodeList.keySet()) {
switch (type) {
case "line":
//生产线入库
for (String ssjCode : ssjCodeList.get(type)) {
try {
if (deviceSsjMap.containsKey(ssjCode)) {
inDispatch(deviceSsjMap.get(ssjCode));
} else {
log.error("设备不存在 ssjCode{}", ssjCode);
}
} catch (RuntimeException e) {
log.error(e.getMessage(), e);
}
}
break;
}
}
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
public void inDispatch(DeviceSsj SsjDevice) {
//如果到位,扫到条码,托盘大小,执行阶段卡控一下(下发输送机后改执行阶段)
if (SsjDevice.getRkqq() == 1 && StrUtil.isNotBlank(SsjDevice.getTrayCode())
&& SsjDevice.getTraySize() != 0 && SsjDevice.getTaskNo() < 1000) {
//log.info("设备:{} 位置:{} 条码:{} 托盘大小:{}", SsjDevice.getDeviceCode(), "产线到位", SsjDevice.getTrayCode(), SsjDevice.getTraySize());
//查作业,入如果已经有了,直接下发输送线
MydoJob mydoJob = new MydoJob();
mydoJob.setInOrOut("1");
String trayCode = SsjDevice.getTrayCode();
//String[] split = trayCode.split("\\s+");
String serial = findFirst(PATTERNS.get("SERIAL"), trayCode);
mydoJob.setTrayCode(serial);
mydoJob.setEntranceId("G1005");
mydoJob.setFlag("0");
mydoJob.setStatus("1");
List<MydoJob> mydoJobs = mydoJobService.selectInOrOutMydoJobList(mydoJob);
//有作业,下发输送机任务号,覆盖任务号
if (!mydoJobs.isEmpty()) {
//永远有且只有一条
mydoJob = mydoJobs.get(0);
int i = writeToSsj(SsjDevice.getPlcDbWriteAddress(), mydoJob.getTaskNo(), Integer.parseInt(mydoJob.getTraySize()), 1);
if (i == 1) {
mydoJob.setExecutionPhase(TASK_EP_LINE_SSJ);
mydoJobService.updateMydoJob(mydoJob);
log.info("G1005产线输送机下发任务号成功:" + mydoJob.getTaskNo());
}
} else {
//请求wms生成入库作业
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("trayCode", SsjDevice.getTrayCode());
paramMap.put("size", SsjDevice.getTraySize());
paramMap.put("floor", "2");
paramMap.put("entranceId", "G1005");
paramMap.put("flag", "0");
AjaxResult ajaxResult = apiService.createInMydoJob(paramMap);
if (ajaxResult.isSuccess()) {
//拿到正常作业,插到wcs作业表,下发给输送机任务号,覆盖任务号
MydoJob mydoJob2 = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class);
mydoJob2.setStatus("1");
mydoJob2.setExecutionPhase(TASK_EP_CREATE);
mydoJob2.setCreateTime(new Date());
mydoJob2.setTraySize(Convert.toStr(SsjDevice.getTraySize()));
mydoJob2.setFaultFlag("0");
mydoJob2.setPriority(Long.valueOf(10));
mydoJobService.insertMydoJob(mydoJob2);
int i = writeToSsj(SsjDevice.getPlcDbWriteAddress(), mydoJob2.getTaskNo(), Integer.parseInt(mydoJob2.getTraySize()), 1);
if (i == 1) {
mydoJob2.setExecutionPhase(TASK_EP_LINE_SSJ);
mydoJobService.updateMydoJob(mydoJob2);
log.info("G1005产线输送机下发任务号成功:{}", mydoJob2.getTaskNo());
}
} else {
/**
* 1, "二维码内容错误!"
* 2,"该序列号已有作业或库存!"
* 3, "物料不存在!"
* 4, "入口与托盘尺寸对应错误!"
* 5, "超大托盘!"
* 6, "托盘大小不匹配!"
* 7, "巷道入库锁定!"
* 8, "没有可用货位!"
* 9, "创建工艺入库单失败!"
*/
}
}
}
if (SsjDevice.getRkqq() == 1 && StrUtil.isBlank(SsjDevice.getTrayCode()) &&
SsjDevice.getTraySize() != 0 && SsjDevice.getTaskNo() < 1000) {
//查wcs有没作业,有下发给输送机任务号,覆盖任务号
MydoJob mydoJob = new MydoJob();
mydoJob.setInOrOut("1");
mydoJob.setEntranceId("G1005");
mydoJob.setFlag("1");
mydoJob.setStatus("1");
List<MydoJob> mydoJobs = mydoJobService.selectInOrOutMydoJobList(mydoJob);
if (!mydoJobs.isEmpty()) {
mydoJob = mydoJobs.get(0);
int i = writeToSsj(SsjDevice.getPlcDbWriteAddress(), mydoJob.getTaskNo(), 1, 1);
if (i == 1) {
mydoJob.setExecutionPhase(TASK_EP_LINE_SSJ);
mydoJobService.updateMydoJob(mydoJob);
log.info("G1005产线输送机下发任务号成功:" + mydoJob.getTaskNo());
}
} else {
//没有,请求错误接口,找作业,返回成功,//拿到正常作业,插到wcs作业表,下发给输送机任务号,覆盖任务号,shibai...
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("size", SsjDevice.getTraySize());
paramMap.put("entranceId", "G1005");
AjaxResult ajaxResult = apiService.selectMydoJobByNoTrayCode(paramMap);
if (ajaxResult.isSuccess()) {
MydoJob mydoJob2 = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class);
if (mydoJob2 != null) {
mydoJob2.setStatus("1");
mydoJob2.setExecutionPhase("0");
mydoJob2.setCreateTime(new Date());
mydoJob2.setTraySize(Convert.toStr(SsjDevice.getTraySize()));
mydoJob2.setFaultFlag("0");
mydoJob2.setPriority(Long.valueOf(10));
mydoJobService.insertMydoJob(mydoJob2);
int i = writeToSsj(SsjDevice.getPlcDbWriteAddress(), mydoJob2.getTaskNo(), 1, 1);
if (i == 1) {
mydoJob2.setExecutionPhase(TASK_EP_LINE_SSJ);
mydoJobService.updateMydoJob(mydoJob2);
log.info("G1005产线输送机下发任务号成功:" + mydoJob2.getTaskNo());
}
}
} else if (ajaxResult.isError()) {
//超大,给plc下发错误信息,等待人工处理
//托盘大小对不上,给plc下发错误信息,等待人工处理
//码不对,给plc下发错误信息,等待人工处理
}
}
}
if (SsjDevice.getDw() == 1 && SsjDevice.getTaskNo() > 1000) {
//log.info("设备:{} 位置:{} 条码:{} 托盘大小:{}", SsjDevice.getDeviceCode(), "产线收到wcs任务号", SsjDevice.getTrayCode(), SsjDevice.getTraySize());
//任务号查wcs作业,查巷道,看目标输送线是否空闲,查是否有出库作业,生成agv队列
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(SsjDevice.getTaskNo()));
String deviceCode = "";
if (mydoJob != null) {
if ("1".equals(mydoJob.getRoadwayId())) {
deviceCode = "L1001";
} else {
deviceCode = "L1003";
}
int kx = deviceSsjMap.get(deviceCode).getKx();
MydoJob mydoJobParam = new MydoJob();
mydoJobParam.setInOut("2");
mydoJobParam.setStatus("3");
mydoJobParam.setExitId(deviceCode);
List<MydoJob> outMydoJobList = mydoJobService.selectInOrOutMydoJobList(mydoJobParam);
if (outMydoJobList.isEmpty() && kx == 1) {
//查是否有队列,如果有了请求放货修改为允许放货
AgvQueue agvQueue = agvQueueService.selectAgvQueueByTaskCode(mydoJob.getJobId());
if (agvQueue != null) {
if ("3".equals(mydoJob.getStatus()) && "2".equals(agvQueue.getStatus()) && SsjDevice.getAllowPut() == 1) {
AjaxResult ajaxResult = apiService.continueTask(agvQueue);
if (ajaxResult.isSuccess()) {
log.info("给agv下发允许取货继续任务成功" + agvQueue.getWmsTaskNo());
agvQueue.setStatus("2");
agvQueueService.updateAgvQueue(agvQueue);
}
}
if ("0".equals(agvQueue.getStatus())) {
apiService.requestAgvQueue(agvQueue);
}
} else {
if ("1".equals(mydoJob.getStatus())) {
HashMap<String, String> paramMap = new HashMap<>();
paramMap.put("trayCode", mydoJob.getTrayCode());
paramMap.put("taskCode", mydoJob.getJobId());
//todo 与agv对点
paramMap.put("startPoint", "G1005");
paramMap.put("endPoint", deviceCode);
paramMap.put("traySize", mydoJob.getTraySize());
paramMap.put("wmsTaskNo", mydoJob.getTaskNo());
AjaxResult ajaxResult = apiService.receiveAgvMoveJob(paramMap);
if (ajaxResult.isSuccess()) {
mydoJob.setStatus("3");
mydoJob.setExecutionPhase(TASK_EP_AGV);
mydoJobService.updateMydoJob(mydoJob);
}
}
}
}
}
}
if (SsjDevice.getDw() == 1 && SsjDevice.getTaskNo() == 2222 && SsjDevice.getTraySize() == 4) {
AgvQueue agvQueue = agvQueueService.selectAgvQueueByWmsTask(SsjDevice.getTaskNo());
if (agvQueue != null) {
if ("2".equals(agvQueue.getStatus()) && SsjDevice.getAllowPut() == 1) {
AjaxResult ajaxResult = apiService.continueTask(agvQueue);
if (ajaxResult.isSuccess()) {
log.info("给agv下发允许取货继续任务成功" + agvQueue.getWmsTaskNo());
agvQueue.setStatus("2");
agvQueueService.updateAgvQueue(agvQueue);
}
}
if ("0".equals(agvQueue.getStatus())) {
apiService.requestAgvQueue(agvQueue);
}
} else {
HashMap<String, String> paramMap = new HashMap<>();
String trayCode = SsjDevice.getTrayCode();
//String[] split = trayCode.split("\\s+");
String serial = findFirst(PATTERNS.get("SERIAL"), trayCode);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String taskCode = "BY" + sdf.format(new Date());
paramMap.put("trayCode", serial);
paramMap.put("taskCode", taskCode);
//todo 与agv对点
paramMap.put("startPoint", "G1005");
paramMap.put("endPoint", "");
paramMap.put("traySize", "5");
paramMap.put("wmsTaskNo", "2222");
AjaxResult ajaxResult = apiService.receiveAgvMoveJob(paramMap);
if (ajaxResult.isSuccess()) {
log.info("G1005超大托盘下发AGV搬运成功!");
}
}
}
if (SsjDevice.getDw() == 0 && SsjDevice.getTaskNo() > 1000 && SsjDevice.getTraySize() > 0) {
AgvQueue agvQueue = agvQueueService.selectAgvQueueByWmsTask(SsjDevice.getTaskNo());
if (agvQueue != null) {
if ("4".equals(agvQueue.getStatus())) {
int i = writeToSsjQH("DB802.122", 1);
if (i == 1) {
log.info("G1005产线输送机下发取货完成成功!");
}
}
}
}
}
private static final Map<String, Pattern> PATTERNS = createPatterns();
private static Map<String, Pattern> createPatterns() {
Map<String, Pattern> map = new LinkedHashMap<>();
map.put("MODEL", Pattern.compile("MODEL:([^\\s]+)", Pattern.CASE_INSENSITIVE));
map.put("COLOR", Pattern.compile("COLOR:([^\\s]+)", Pattern.CASE_INSENSITIVE));
map.put("SERIAL", Pattern.compile("SERIAL:([^\\s]+)", Pattern.CASE_INSENSITIVE));
map.put("V", Pattern.compile("V:([^\\s]+)", Pattern.CASE_INSENSITIVE));
map.put("Hz", Pattern.compile("Hz:([^\\s]+)", Pattern.CASE_INSENSITIVE));
map.put("PH", Pattern.compile("PH:([^\\s]+)", Pattern.CASE_INSENSITIVE));
map.put("NW", Pattern.compile("N\\.W\\.:([^\\s]+)", Pattern.CASE_INSENSITIVE));
map.put("GW", Pattern.compile("G\\.W\\.:([^\\s]+)", Pattern.CASE_INSENSITIVE));
map.put("ITEM_CODE", Pattern.compile("ITEM_CODE:([^\\s]+)", Pattern.CASE_INSENSITIVE));
map.put("@", Pattern.compile("@:([^\\s]+)", Pattern.CASE_INSENSITIVE));
return map;
}
private static String findFirst(Pattern pattern, String input) {
if (pattern == null || input == null) return null;
Matcher m = pattern.matcher(input);
return m.find() ? m.group(1) : null;
}
}

View File

@@ -23,6 +23,7 @@ import com.ruoyi.queue.agv.service.IAgvQueueService;
import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.PostConstruct;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -107,7 +108,7 @@ public class PortConvThread implements Runnable {
//请求参数
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("taskTypeCode", inSsjDevice.getTrayCode());//任务类型编号
paramMap.put("reqCode", UUID.randomUUID().toString());//任请求码
paramMap.put("reqCode", UUID.randomUUID().toString());//请求码
paramMap.put("cntCode", inSsjDevice.getTrayCode());//容器编号
int height = inSsjDevice.getHeight();
int weight = inSsjDevice.getWeight();
@@ -182,8 +183,12 @@ public class PortConvThread implements Runnable {
//获取wms下发的任务号和分配货位
StockinReceive result = BeanUtil.toBean(ajaxResult.get("result"), StockinReceive.class);
MydoJob mydoJob = new MydoJob();
// mydoJob.setJobId();
mydoJob.setTrayCode(result.getCntCode());
mydoJob.setCargoSpaceId(result.getSiteCode());
mydoJob.setWmsTaskNo(result.getTaskCode());
mydoJob.setJobId(mydoJobService.getJobId("RK"));
mydoJob.setTaskNo(mydoJobService.getTaskNo("1"));
// mydoJob.setTaskNo(result.getTaskCode());//todo 确定是否用获取的任务号作为wcs的任务号
//todo 校验wms分配的货位(排列层)是否合法
@@ -243,7 +248,10 @@ public class PortConvThread implements Runnable {
jobCallBack.setStatus("0");
jobCallBack.setTaskNo(Convert.toLong(mydoJob.getTaskNo()));
jobCallBack.setCreateTime(new Date());
jobCallBack.setSpare1("0");
jobCallBack.setTaskTypeCode("");//todo ???
jobCallBack.setReqCode(UUID.randomUUID().toString());
jobCallBack.setTaskCode(mydoJob.getWmsTaskNo());
// jobCallBack.setSpare1("0");
jobCallBackService.insertJobCallBack(jobCallBack);
}
}
@@ -252,21 +260,17 @@ public class PortConvThread implements Runnable {
}
}
public void inDispatch1(DeviceSsj ssjDevice) {
//有入库请求就肯定是电气的任务号的作业
if(StrUtil.isNotBlank(ssjDevice.getTrayCode()) && ssjDevice.getRkqq()==1 && ssjDevice.getTaskNo()<1000){
//,如果有正执行的出库作业退回
MydoJob mydoJobParam = new MydoJob();
mydoJobParam.setInOut("2");
// mydoJobParam.setInOut("2");
mydoJobParam.setStatus("3");
mydoJobParam.setExitId(ssjDevice.getDeviceCode());
List<MydoJob> outMydoJobList = mydoJobService.selectInOrOutMydoJobList(mydoJobParam);

View File

@@ -11,13 +11,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="mydojobId" column="mydojob_id" />
<result property="status" column="status" />
<result property="createTime" column="create_time" />
<result property="spare1" column="spare1" />
<result property="spare2" column="spare2" />
<result property="spare3" column="spare3" />
<!-- <result property="spare1" column="spare1" />-->
<!-- <result property="spare2" column="spare2" />-->
<!-- <result property="spare3" column="spare3" />-->
</resultMap>
<sql id="selectJobCallBackVo">
select id, type, task_no, mydojob_id, status, create_time, spare1, spare2, spare3 from job_call_back
select id, type, task_no, mydojob_id, status, create_time from job_call_back
</sql>
<select id="selectJobCallBackList" parameterType="JobCallBack" resultMap="JobCallBackResult">
@@ -50,9 +50,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="mydojobId != null">mydojob_id,</if>
<if test="status != null">status,</if>
<if test="createTime != null">create_time,</if>
<if test="spare1 != null">spare1,</if>
<if test="spare2 != null">spare2,</if>
<if test="spare3 != null">spare3,</if>
<!-- <if test="spare1 != null">spare1,</if>-->
<!-- <if test="spare2 != null">spare2,</if>-->
<!-- <if test="spare3 != null">spare3,</if>-->
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="type != null">#{type},</if>
@@ -60,9 +60,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="mydojobId != null">#{mydojobId},</if>
<if test="status != null">#{status},</if>
<if test="createTime != null">#{createTime},</if>
<if test="spare1 != null">#{spare1},</if>
<if test="spare2 != null">#{spare2},</if>
<if test="spare3 != null">#{spare3},</if>
<!-- <if test="spare1 != null">#{spare1},</if>-->
<!-- <if test="spare2 != null">#{spare2},</if>-->
<!-- <if test="spare3 != null">#{spare3},</if>-->
</trim>
</insert>
@@ -74,9 +74,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="mydojobId != null">mydojob_id = #{mydojobId},</if>
<if test="status != null">status = #{status},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="spare1 != null">spare1 = #{spare1},</if>
<if test="spare2 != null">spare2 = #{spare2},</if>
<if test="spare3 != null">spare3 = #{spare3},</if>
<!-- <if test="spare1 != null">spare1 = #{spare1},</if>-->
<!-- <if test="spare2 != null">spare2 = #{spare2},</if>-->
<!-- <if test="spare3 != null">spare3 = #{spare3},</if>-->
</trim>
where id = #{id}
</update>
@@ -93,7 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete>
<select id="getTopJobCallBack" resultMap="JobCallBackResult">
select top(1) id, type, task_no, mydojob_id, status, create_time, spare1, spare2, spare3 from job_call_back
select top(1) id, type, task_no, mydojob_id, status, create_timefrom job_call_back
where status = '0' and spare1 in ('0','1','2')
order by create_time asc
</select>

View File

@@ -25,13 +25,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="flag" column="flag" />
<result property="trayCode" column="tray_code" />
<result property="traySize" column="tray_size" />
<result property="wmsTaskNo" column="wms_task_no" />
</resultMap>
<sql id="selectMydoJobVo">
select job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,flag,tray_code,tray_size from mydo_job_wcs
select job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,flag,tray_code,tray_size,wms_task_no from mydo_job_wcs
</sql>
<sql id="selectMydoJobFinishVo">
select job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,flag,tray_code,tray_size from mydo_job_wcs_finish
select job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,flag,tray_code,tray_size,wms_task_no from mydo_job_wcs_finish
</sql>
<select id="selectMydoJobList" parameterType="MydoJob" resultMap="MydoJobResult">
@@ -47,23 +48,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{targetCargoSpaceId}
</if>
<if test="priority != null ">and priority = #{priority}</if>
<if test="executionPhase != null and executionPhase != ''">and execution_phase = #{executionPhase}</if>
<if test="inOrOut != null and inOrOut != ''">and in_or_out = #{inOrOut}</if>
<if test="startTime != null and startTime != ''">and start_time = #{startTime}</if>
<if test="finishTime != null and finishTime != ''">and finish_time = #{finishTime}</if>
<if test="entranceId != null and entranceId != ''">and entrance_id = #{entranceId}</if>
<if test="exitId != null and exitId != ''">and exit_id = #{exitId}</if>
<if test="warehouseId != null and warehouseId != ''">and warehouse_id = #{warehouseId}</if>
<if test="faultFlag != null and faultFlag != ''">and fault_flag = #{faultFlag}</if>
<if test="executionPhase != null and executionPhase != ''">and execution_phase = #{executionPhase}</if>
<if test="inOrOut != null and inOrOut != ''">and in_or_out = #{inOrOut}</if>
<if test="startTime != null and startTime != ''">and start_time = #{startTime}</if>
<if test="finishTime != null and finishTime != ''">and finish_time = #{finishTime}</if>
<if test="entranceId != null and entranceId != ''">and entrance_id = #{entranceId}</if>
<if test="exitId != null and exitId != ''">and exit_id = #{exitId}</if>
<if test="warehouseId != null and warehouseId != ''">and warehouse_id = #{warehouseId}</if>
<if test="faultFlag != null and faultFlag != ''">and fault_flag = #{faultFlag}</if>
<if test="flag != null and flag != ''">and flag = #{flag}</if>
<if test="trayCode != null and trayCode != ''">and tray_code = #{trayCode}</if>
<if test="traySize != null and traySize != ''">and traySize = #{tray_size}</if>
<if test="trayCode != null and trayCode != ''">and tray_code = #{trayCode}</if>
<if test="traySize != null and traySize != ''">and traySize = #{tray_size}</if>
<if test="epList != null and epList.size() > 0">
and entrance_id in
<foreach item="item" index="index" collection="epList" separator="," open="(" close=")">
#{item}
</foreach>
</if>
<if test="wmsTaskNo != null and wmsTaskNo != ''">and wms_task_no = #{wmsTaskNo}</if>
</where>
</select>
@@ -76,7 +78,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select job_id, a.status, task_no, a.roadway_id, b.cargo_space_name as cargo_space_id, target_roadway_id,
target_cargo_space_id, priority, execution_phase, in_or_out, create_time,
start_time, finish_time, entrance_id, exit_id, a.warehouse_id, fault_flag,
flag,a.tray_code,tray_size
flag,a.tray_code,tray_size,wms_task_no
from mydo_job_wcs a,bas_cargo_space b
where a.cargo_space_id = b.cargo_space_id
and task_no = #{taskNo}
@@ -104,7 +106,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
)}
</select>
<select id="selectMydoJobByExitList" resultMap="MydoJobResult">
select TOP 1 job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,flag,tray_code,tray_size from mydo_job_wcs
select TOP 1 job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,flag,tray_code,tray_size,wms_task_no from mydo_job_wcs
where exit_id in
<foreach item="item" index="index" collection="exitList" separator="," open="(" close=")">
#{item}
@@ -115,7 +117,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectMydoJobByExitList1" resultMap="MydoJobResult">
select TOP 1 job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,flag,tray_code,tray_size from mydo_job_wcs
select TOP 1 job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,flag,tray_code,tray_size,wms_task_no from mydo_job_wcs
where exit_id = #{exitId}
and roadway_id = #{roadwayId}
and in_or_out &gt; 20
@@ -146,6 +148,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="flag != null">flag,</if>
<if test="trayCode != null">tray_code,</if>
<if test="traySize != null">tray_size,</if>
<if test="wmsTaskNo != null">wms_task_no,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="jobId != null">#{jobId},</if>
@@ -168,7 +171,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="flag != null">#{flag},</if>
<if test="trayCode != null">#{trayCode},</if>
<if test="traySize != null">#{traySize},</if>
<if test="wmsTaskNo != null">#{wmsTaskNo},</if>
</trim>
</insert>
<insert id="insertHistory">
@@ -198,6 +201,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="flag != null">flag = #{flag},</if>
<if test="trayCode != null">tray_code = #{trayCode},</if>
<if test="traySize != null">tray_size = #{traySize},</if>
<if test="wmsTaskNo != null">wms_task_no = #{wmsTaskNo},</if>
</trim>
where job_id = #{jobId}
</update>
@@ -237,10 +241,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="exitId != null and exitId != ''"> and exit_id = #{exitId}</if>
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
<if test="faultFlag != null and faultFlag != ''"> and fault_flag = #{faultFlag}</if>
<if test="jobId != null and jobId != ''"> and job_id = #{jobId}</if>
<if test="flag != null and flag != ''"> and flag = #{flag}</if>
<if test="trayCode != null and trayCode != ''"> and tray_code = #{trayCode}</if>
<if test="traySize != null and traySize != ''"> and tray_size = #{traySize}</if>
<if test="jobId != null and jobId != ''"> and job_id = #{jobId}</if>
<if test="flag != null and flag != ''"> and flag = #{flag}</if>
<if test="trayCode != null and trayCode != ''"> and tray_code = #{trayCode}</if>
<if test="traySize != null and traySize != ''"> and tray_size = #{traySize}</if>
<if test="wmsTaskNo != null and wmsTaskNo != ''">and wms_task_no = #{wmsTaskNo}</if>
</where>
</select>
<select id="selectMydoJobByEntranceList" resultMap="MydoJobResult">
@@ -296,6 +301,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="flag != null and flag != ''"> and flag = #{flag}</if>
<if test="trayCode != null and trayCode != ''"> and tray_code = #{trayCode}</if>
<if test="traySize != null and traySize != ''"> and tray_size = #{traySize}</if>
<if test="wmsTaskNo != null and wmsTaskNo != ''">and wms_task_no = #{wmsTaskNo}</if>
</where>
</select>
<select id="selectRunningMydoJobByExitList" resultMap="MydoJobResult">
@@ -318,4 +324,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and in_or_out &lt; 20
and status in (1,3)
</select>
<select id="getJobId" statementType="CALLABLE" parameterType="java.util.Map" >
{ CALL util_serial_job(
#{v_param, mode=IN, jdbcType=VARCHAR},
#{v_serial, mode=OUT, jdbcType=VARCHAR}
)
}
</select>
<select id="getTaskNo" statementType="CALLABLE" parameterType="java.util.Map" >
{ CALL util_serial_task(
#{v_param, mode=IN, jdbcType=VARCHAR},
#{v_serial, mode=OUT, jdbcType=VARCHAR}
)
}
</select>
</mapper>