接口记录表 wcs对外接口 绑定料架接口

This commit is contained in:
liuhanqing
2025-07-10 09:26:00 +08:00
parent 0baf2119e4
commit 8e3f72e0ae
28 changed files with 1934 additions and 76 deletions

View File

@@ -0,0 +1,61 @@
package com.ruoyi.api.controller;
import com.ruoyi.api.domain.WmsJobRequest;
import com.ruoyi.api.service.IToWmsService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.job.mydojob.domain.MydoJob;
import com.ruoyi.job.mydojob.service.IMydoJobService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* 作业统计 Controller
*/
@RestController
@RequestMapping("/api2wms")
public class ToWmsApiController {
@Autowired
private IToWmsService toWmsService;
/**
* 入库任务请求
*/
@PostMapping("/inJob")
public AjaxResult inJob(@RequestBody MydoJob mydoJob) {
return toWmsService.inJob(mydoJob);
}
/**
* 入库、出库 任务完成回传
* Map<String, String>
* "wmsType": "任务类型" 1-入库 2-出库 3-agv搬运,
* taskNo:出库 入库任务号
* trayCode:托盘码
* positionCode1:起点
* positionCode2:终点
* containerCode:容器编码
*
*/
@PostMapping("/jobFinish")
public AjaxResult jobFinish(@RequestBody WmsJobRequest wmsJobRequest) {
return toWmsService.jobFinish(wmsJobRequest);
}
/**
* 放货有货,重新分配货位
*/
@GetMapping("/reAssign")
public AjaxResult reAssign(MydoJob mydoJob) {
return AjaxResult.success();
}
/**
* 取货无货,重新分配物料
*/
@GetMapping("/reMaterial")
public AjaxResult reMaterial(MydoJob mydoJob) {
return AjaxResult.success();
}
}

View File

@@ -0,0 +1,23 @@
package com.ruoyi.api.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WmsJobRequest {
//wms任务类型 1 入库 2-出库 3-agv任务
private String wmsType;
//wms任务号
private String taskNo;
//托盘编码
private String trayCode;
//料架编码
private String containerCode;
//起点
private String positionCode1;
//终点
private String positionCode2;
}

View File

@@ -0,0 +1,17 @@
package com.ruoyi.api.service;
import com.ruoyi.api.domain.WmsJobRequest;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.job.mydojob.domain.MydoJob;
import java.util.Map;
/**
* 作业统计 Service 接口
*/
public interface IToWmsService {
AjaxResult inJob(MydoJob mydoJob);
AjaxResult jobFinish(WmsJobRequest wmsJobRequest);
}

View File

@@ -0,0 +1,95 @@
package com.ruoyi.api.service.impl;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.ruoyi.api.domain.WmsJobRequest;
import com.ruoyi.api.mapper.JobStatisticsMapper;
import com.ruoyi.api.service.IJobStatisticsService;
import com.ruoyi.api.service.IToWmsService;
import com.ruoyi.bas.cargoSpace.mapper.BasCargoSpaceMapper;
import com.ruoyi.bas.container.domain.BasContainer;
import com.ruoyi.bas.container.service.IBasContainerService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.job.mydojob.domain.MydoJob;
import com.ruoyi.job.mydojob.mapper.MydoJobMapper;
import com.ruoyi.job.mydojob.service.IMydoJobService;
import org.aspectj.weaver.loadtime.Aj;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 作业统计 Service 实现
*/
@Service
public class ToWmsServiceImpl implements IToWmsService {
@Autowired
private IMydoJobService mydoJobService;
@Autowired
private IBasContainerService basContainerService;
@Override
public AjaxResult inJob(MydoJob mydoJob) {
List<MydoJob> mydoJobs = mydoJobService.selectMydoJobList(mydoJob);
if(mydoJobs.isEmpty()){
return AjaxResult.error("此托盘没有作业");
}
return AjaxResult.success(mydoJobs.get(0));
}
@Override
public AjaxResult jobFinish(WmsJobRequest wmsJobRequest) {
MydoJob mydoJobParam = new MydoJob();
switch (wmsJobRequest.getWmsType()){
case "1":
//入库
mydoJobParam.setTaskNo(wmsJobRequest.getTaskNo());
mydoJobParam.setTrayCode(wmsJobRequest.getTrayCode());
List<MydoJob> inMydoJobs = mydoJobService.selectMydoJobList(mydoJobParam);
if (inMydoJobs.isEmpty()){
return AjaxResult.error("没有该作业 taskNo: {}", wmsJobRequest.getTaskNo());
}
MydoJob inMydoJob = inMydoJobs.get(0);
mydoJobService.manualCompleted(inMydoJob);
break;
case "2":
//出库
mydoJobParam.setTaskNo(wmsJobRequest.getTaskNo());
mydoJobParam.setTrayCode(wmsJobRequest.getTrayCode());
List<MydoJob> outMydoJobs = mydoJobService.selectMydoJobList(mydoJobParam);
if (outMydoJobs.isEmpty()){
return AjaxResult.error("没有该作业 taskNo: {}", wmsJobRequest.getTaskNo());
}
//mydoJobService.OuthandFinish(outMydoJobs.stream().map(MydoJob::getJobId).toArray(String[]::new));
//todo 同步电子标签
break;
case "3":
//agv搬运作业
//绑定料架和点位
BasContainer basContainerParam = new BasContainer();
basContainerParam.setContainerId(wmsJobRequest.getContainerCode());
basContainerParam.setPortName(wmsJobRequest.getPositionCode1());
List<BasContainer> basContainers = basContainerService.selectBasContainerList(basContainerParam);
if (basContainers.isEmpty()){
return AjaxResult.error("没有该料架 {}", wmsJobRequest.getContainerCode());
}
//修改绑定点位
BasContainer basContainer = basContainers.get(0);
basContainer.setPortName(wmsJobRequest.getPositionCode2());
basContainerService.updateBasContainer(basContainer);
break;
default:
return AjaxResult.error("作业类型错误");
}
return null;
}
}

View File

@@ -1,7 +1,6 @@
package com.ruoyi.job.mydojob.service.impl; package com.ruoyi.job.mydojob.service.impl;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@@ -23,10 +22,10 @@ import com.ruoyi.in.stockindetail.domain.InStockinDetail;
import com.ruoyi.in.stockindetail.service.IInStockinDetailService; import com.ruoyi.in.stockindetail.service.IInStockinDetailService;
import com.ruoyi.job.mydojobdetail.domain.MydoJobDetail; import com.ruoyi.job.mydojobdetail.domain.MydoJobDetail;
import com.ruoyi.job.mydojobdetail.service.IMydoJobDetailService; import com.ruoyi.job.mydojobdetail.service.IMydoJobDetailService;
import com.ruoyi.out.domain.OutExceptionRecord; import com.ruoyi.out.exception.domain.OutExceptionRecord;
import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail; import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail;
import com.ruoyi.out.outStockoutDetail.service.IOutStockoutDetailService; import com.ruoyi.out.outStockoutDetail.service.IOutStockoutDetailService;
import com.ruoyi.out.service.IOutExceptionRecordService; import com.ruoyi.out.exception.service.IOutExceptionRecordService;
import com.ruoyi.stock.stock.domain.BasStock; import com.ruoyi.stock.stock.domain.BasStock;
import com.ruoyi.stock.stock.service.IBasStockService; import com.ruoyi.stock.stock.service.IBasStockService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -126,6 +126,16 @@ public class MydoJobDetail extends BaseEntity
//额外字段 //额外字段
private ExtraField extraField; private ExtraField extraField;
private String pickQuantityReal; private String pickQuantityReal;
//绑定容器物品数量
private String pickBindQuantity;
public String getPickBindQuantity() {
return pickBindQuantity;
}
public void setPickBindQuantity(String pickBindQuantity) {
this.pickBindQuantity = pickBindQuantity;
}
public String getPickQuantityReal() { public String getPickQuantityReal() {
return pickQuantityReal; return pickQuantityReal;

View File

@@ -0,0 +1,104 @@
package com.ruoyi.log.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.log.domain.RequestLog;
import com.ruoyi.log.service.IRequestLogService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 接口记录Controller
*
* @author ruoyi
* @date 2025-07-02
*/
@RestController
@RequestMapping("/requestInterface/log")
public class RequestLogController extends BaseController
{
@Autowired
private IRequestLogService requestLogService;
/**
* 查询接口记录列表
*/
@PreAuthorize("@ss.hasPermi('requestInterface:log:list')")
@GetMapping("/list")
public TableDataInfo list(RequestLog requestLog)
{
startPage();
List<RequestLog> list = requestLogService.selectRequestLogList(requestLog);
return getDataTable(list);
}
/**
* 导出接口记录列表
*/
@PreAuthorize("@ss.hasPermi('requestInterface:log:export')")
@Log(title = "接口记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, RequestLog requestLog)
{
List<RequestLog> list = requestLogService.selectRequestLogList(requestLog);
ExcelUtil<RequestLog> util = new ExcelUtil<RequestLog>(RequestLog.class);
util.exportExcel(response, list, "接口记录数据");
}
/**
* 获取接口记录详细信息
*/
@PreAuthorize("@ss.hasPermi('requestInterface:log:query')")
@GetMapping(value = "/{requestId}")
public AjaxResult getInfo(@PathVariable("requestId") Long requestId)
{
return success(requestLogService.selectRequestLogByRequestId(requestId));
}
/**
* 新增接口记录
*/
@PreAuthorize("@ss.hasPermi('requestInterface:log:add')")
@Log(title = "接口记录", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody RequestLog requestLog)
{
return toAjax(requestLogService.insertRequestLog(requestLog));
}
/**
* 修改接口记录
*/
@PreAuthorize("@ss.hasPermi('requestInterface:log:edit')")
@Log(title = "接口记录", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody RequestLog requestLog)
{
return toAjax(requestLogService.updateRequestLog(requestLog));
}
/**
* 删除接口记录
*/
@PreAuthorize("@ss.hasPermi('requestInterface:log:remove')")
@Log(title = "接口记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{requestIds}")
public AjaxResult remove(@PathVariable Long[] requestIds)
{
return toAjax(requestLogService.deleteRequestLogByRequestIds(requestIds));
}
}

View File

@@ -0,0 +1,247 @@
package com.ruoyi.log.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 接口记录对象 request_log
*
* @author ruoyi
* @date 2025-07-02
*/
public class RequestLog extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 请求id */
private Long requestId;
/** 请求时间 */
@Excel(name = "请求时间")
private String requestTime;
/** 来源系统 */
@Excel(name = "来源系统")
private String sourceSystem;
/** 目标系统 */
@Excel(name = "目标系统")
private String targetSystem;
/** 接口名称 */
@Excel(name = "接口名称")
private String endpoint;
/** 请求URL */
@Excel(name = "请求URL")
private String requestUrl;
/** 请求方式 */
@Excel(name = "请求方式")
private String requestMethod;
/** 请求头信息 */
@Excel(name = "请求头信息")
private String requestHeaders;
/** 请求参数 */
@Excel(name = "请求参数")
private String requestBody;
/** 响应时间 */
@Excel(name = "响应时间")
private String responseTime;
/** 响应主体 */
@Excel(name = "响应主体")
private String responseBody;
/** 响应状态 */
@Excel(name = "响应状态")
private String responseStatus;
/** 错误信息 */
@Excel(name = "错误信息")
private String errorDetails;
/** 耗时 */
@Excel(name = "耗时")
private String duration;
/** 是否成功 */
@Excel(name = "是否成功")
private String isSuccessful;
public void setRequestId(Long requestId)
{
this.requestId = requestId;
}
public Long getRequestId()
{
return requestId;
}
public void setRequestTime(String requestTime)
{
this.requestTime = requestTime;
}
public String getRequestTime()
{
return requestTime;
}
public void setSourceSystem(String sourceSystem)
{
this.sourceSystem = sourceSystem;
}
public String getSourceSystem()
{
return sourceSystem;
}
public void setTargetSystem(String targetSystem)
{
this.targetSystem = targetSystem;
}
public String getTargetSystem()
{
return targetSystem;
}
public void setEndpoint(String endpoint)
{
this.endpoint = endpoint;
}
public String getEndpoint()
{
return endpoint;
}
public void setRequestUrl(String requestUrl)
{
this.requestUrl = requestUrl;
}
public String getRequestUrl()
{
return requestUrl;
}
public void setRequestMethod(String requestMethod)
{
this.requestMethod = requestMethod;
}
public String getRequestMethod()
{
return requestMethod;
}
public void setRequestHeaders(String requestHeaders)
{
this.requestHeaders = requestHeaders;
}
public String getRequestHeaders()
{
return requestHeaders;
}
public void setRequestBody(String requestBody)
{
this.requestBody = requestBody;
}
public String getRequestBody()
{
return requestBody;
}
public void setResponseTime(String responseTime)
{
this.responseTime = responseTime;
}
public String getResponseTime()
{
return responseTime;
}
public void setResponseBody(String responseBody)
{
this.responseBody = responseBody;
}
public String getResponseBody()
{
return responseBody;
}
public void setResponseStatus(String responseStatus)
{
this.responseStatus = responseStatus;
}
public String getResponseStatus()
{
return responseStatus;
}
public void setErrorDetails(String errorDetails)
{
this.errorDetails = errorDetails;
}
public String getErrorDetails()
{
return errorDetails;
}
public void setDuration(String duration)
{
this.duration = duration;
}
public String getDuration()
{
return duration;
}
public void setIsSuccessful(String isSuccessful)
{
this.isSuccessful = isSuccessful;
}
public String getIsSuccessful()
{
return isSuccessful;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("requestId", getRequestId())
.append("requestTime", getRequestTime())
.append("sourceSystem", getSourceSystem())
.append("targetSystem", getTargetSystem())
.append("endpoint", getEndpoint())
.append("requestUrl", getRequestUrl())
.append("requestMethod", getRequestMethod())
.append("requestHeaders", getRequestHeaders())
.append("requestBody", getRequestBody())
.append("responseTime", getResponseTime())
.append("responseBody", getResponseBody())
.append("responseStatus", getResponseStatus())
.append("errorDetails", getErrorDetails())
.append("duration", getDuration())
.append("isSuccessful", getIsSuccessful())
.toString();
}
}

View File

@@ -0,0 +1,61 @@
package com.ruoyi.log.mapper;
import java.util.List;
import com.ruoyi.log.domain.RequestLog;
/**
* 接口记录Mapper接口
*
* @author ruoyi
* @date 2025-07-02
*/
public interface RequestLogMapper
{
/**
* 查询接口记录
*
* @param requestId 接口记录主键
* @return 接口记录
*/
public RequestLog selectRequestLogByRequestId(Long requestId);
/**
* 查询接口记录列表
*
* @param requestLog 接口记录
* @return 接口记录集合
*/
public List<RequestLog> selectRequestLogList(RequestLog requestLog);
/**
* 新增接口记录
*
* @param requestLog 接口记录
* @return 结果
*/
public int insertRequestLog(RequestLog requestLog);
/**
* 修改接口记录
*
* @param requestLog 接口记录
* @return 结果
*/
public int updateRequestLog(RequestLog requestLog);
/**
* 删除接口记录
*
* @param requestId 接口记录主键
* @return 结果
*/
public int deleteRequestLogByRequestId(Long requestId);
/**
* 批量删除接口记录
*
* @param requestIds 需要删除的数据主键集合
* @return 结果
*/
public int deleteRequestLogByRequestIds(Long[] requestIds);
}

View File

@@ -0,0 +1,61 @@
package com.ruoyi.log.service;
import java.util.List;
import com.ruoyi.log.domain.RequestLog;
/**
* 接口记录Service接口
*
* @author ruoyi
* @date 2025-07-02
*/
public interface IRequestLogService
{
/**
* 查询接口记录
*
* @param requestId 接口记录主键
* @return 接口记录
*/
public RequestLog selectRequestLogByRequestId(Long requestId);
/**
* 查询接口记录列表
*
* @param requestLog 接口记录
* @return 接口记录集合
*/
public List<RequestLog> selectRequestLogList(RequestLog requestLog);
/**
* 新增接口记录
*
* @param requestLog 接口记录
* @return 结果
*/
public int insertRequestLog(RequestLog requestLog);
/**
* 修改接口记录
*
* @param requestLog 接口记录
* @return 结果
*/
public int updateRequestLog(RequestLog requestLog);
/**
* 批量删除接口记录
*
* @param requestIds 需要删除的接口记录主键集合
* @return 结果
*/
public int deleteRequestLogByRequestIds(Long[] requestIds);
/**
* 删除接口记录信息
*
* @param requestId 接口记录主键
* @return 结果
*/
public int deleteRequestLogByRequestId(Long requestId);
}

View File

@@ -0,0 +1,93 @@
package com.ruoyi.log.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.log.mapper.RequestLogMapper;
import com.ruoyi.log.domain.RequestLog;
import com.ruoyi.log.service.IRequestLogService;
/**
* 接口记录Service业务层处理
*
* @author ruoyi
* @date 2025-07-02
*/
@Service
public class RequestLogServiceImpl implements IRequestLogService
{
@Autowired
private RequestLogMapper requestLogMapper;
/**
* 查询接口记录
*
* @param requestId 接口记录主键
* @return 接口记录
*/
@Override
public RequestLog selectRequestLogByRequestId(Long requestId)
{
return requestLogMapper.selectRequestLogByRequestId(requestId);
}
/**
* 查询接口记录列表
*
* @param requestLog 接口记录
* @return 接口记录
*/
@Override
public List<RequestLog> selectRequestLogList(RequestLog requestLog)
{
return requestLogMapper.selectRequestLogList(requestLog);
}
/**
* 新增接口记录
*
* @param requestLog 接口记录
* @return 结果
*/
@Override
public int insertRequestLog(RequestLog requestLog)
{
return requestLogMapper.insertRequestLog(requestLog);
}
/**
* 修改接口记录
*
* @param requestLog 接口记录
* @return 结果
*/
@Override
public int updateRequestLog(RequestLog requestLog)
{
return requestLogMapper.updateRequestLog(requestLog);
}
/**
* 批量删除接口记录
*
* @param requestIds 需要删除的接口记录主键
* @return 结果
*/
@Override
public int deleteRequestLogByRequestIds(Long[] requestIds)
{
return requestLogMapper.deleteRequestLogByRequestIds(requestIds);
}
/**
* 删除接口记录信息
*
* @param requestId 接口记录主键
* @return 结果
*/
@Override
public int deleteRequestLogByRequestId(Long requestId)
{
return requestLogMapper.deleteRequestLogByRequestId(requestId);
}
}

View File

@@ -1,4 +1,4 @@
package com.ruoyi.out.controller; package com.ruoyi.out.exception.controller;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -16,8 +16,8 @@ import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.out.domain.OutExceptionRecord; import com.ruoyi.out.exception.domain.OutExceptionRecord;
import com.ruoyi.out.service.IOutExceptionRecordService; import com.ruoyi.out.exception.service.IOutExceptionRecordService;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;

View File

@@ -1,4 +1,4 @@
package com.ruoyi.out.domain; package com.ruoyi.out.exception.domain;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.lang3.builder.ToStringStyle;

View File

@@ -1,7 +1,8 @@
package com.ruoyi.out.mapper; package com.ruoyi.out.exception.mapper;
import com.ruoyi.out.exception.domain.OutExceptionRecord;
import java.util.List; import java.util.List;
import com.ruoyi.out.domain.OutExceptionRecord;
/** /**
* 出库异常Mapper接口 * 出库异常Mapper接口

View File

@@ -1,7 +1,7 @@
package com.ruoyi.out.service; package com.ruoyi.out.exception.service;
import java.util.List; import java.util.List;
import com.ruoyi.out.domain.OutExceptionRecord; import com.ruoyi.out.exception.domain.OutExceptionRecord;
/** /**
* 出库异常Service接口 * 出库异常Service接口

View File

@@ -1,11 +1,11 @@
package com.ruoyi.out.service.impl; package com.ruoyi.out.exception.service.impl;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.out.mapper.OutExceptionRecordMapper; import com.ruoyi.out.exception.mapper.OutExceptionRecordMapper;
import com.ruoyi.out.domain.OutExceptionRecord; import com.ruoyi.out.exception.domain.OutExceptionRecord;
import com.ruoyi.out.service.IOutExceptionRecordService; import com.ruoyi.out.exception.service.IOutExceptionRecordService;
/** /**
* 出库异常Service业务层处理 * 出库异常Service业务层处理

View File

@@ -0,0 +1,104 @@
package com.ruoyi.out.submit.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.out.submit.domain.OutPickSubmit;
import com.ruoyi.out.submit.service.IOutPickSubmitService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 出库拣选缓存记录Controller
*
* @author ruoyi
* @date 2025-07-10
*/
@RestController
@RequestMapping("/out/submit")
public class OutPickSubmitController extends BaseController
{
@Autowired
private IOutPickSubmitService outPickSubmitService;
/**
* 查询出库拣选缓存记录列表
*/
@PreAuthorize("@ss.hasPermi('out:submit:list')")
@GetMapping("/list")
public TableDataInfo list(OutPickSubmit outPickSubmit)
{
startPage();
List<OutPickSubmit> list = outPickSubmitService.selectOutPickSubmitList(outPickSubmit);
return getDataTable(list);
}
/**
* 导出出库拣选缓存记录列表
*/
@PreAuthorize("@ss.hasPermi('out:submit:export')")
@Log(title = "出库拣选缓存记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, OutPickSubmit outPickSubmit)
{
List<OutPickSubmit> list = outPickSubmitService.selectOutPickSubmitList(outPickSubmit);
ExcelUtil<OutPickSubmit> util = new ExcelUtil<OutPickSubmit>(OutPickSubmit.class);
util.exportExcel(response, list, "出库拣选缓存记录数据");
}
/**
* 获取出库拣选缓存记录详细信息
*/
@PreAuthorize("@ss.hasPermi('out:submit:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(outPickSubmitService.selectOutPickSubmitById(id));
}
/**
* 新增出库拣选缓存记录
*/
@PreAuthorize("@ss.hasPermi('out:submit:add')")
@Log(title = "出库拣选缓存记录", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody OutPickSubmit outPickSubmit)
{
return toAjax(outPickSubmitService.insertOutPickSubmit(outPickSubmit));
}
/**
* 修改出库拣选缓存记录
*/
@PreAuthorize("@ss.hasPermi('out:submit:edit')")
@Log(title = "出库拣选缓存记录", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody OutPickSubmit outPickSubmit)
{
return toAjax(outPickSubmitService.updateOutPickSubmit(outPickSubmit));
}
/**
* 删除出库拣选缓存记录
*/
@PreAuthorize("@ss.hasPermi('out:submit:remove')")
@Log(title = "出库拣选缓存记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(outPickSubmitService.deleteOutPickSubmitByIds(ids));
}
}

View File

@@ -0,0 +1,112 @@
package com.ruoyi.out.submit.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 出库拣选缓存记录对象 out_pick_submit
*
* @author ruoyi
* @date 2025-07-10
*/
public class OutPickSubmit extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** $column.columnComment */
private Long id;
/** 托盘码 */
@Excel(name = "托盘码")
private String trayCode;
/** 任务id */
@Excel(name = "任务id")
private String jobId;
/** 子任务id */
@Excel(name = "子任务id")
private String jobDetailId;
/** 物料编码 */
@Excel(name = "物料编码")
private String productId;
/** 物料数量 */
@Excel(name = "物料数量")
private String quantit;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setTrayCode(String trayCode)
{
this.trayCode = trayCode;
}
public String getTrayCode()
{
return trayCode;
}
public void setJobId(String jobId)
{
this.jobId = jobId;
}
public String getJobId()
{
return jobId;
}
public void setJobDetailId(String jobDetailId)
{
this.jobDetailId = jobDetailId;
}
public String getJobDetailId()
{
return jobDetailId;
}
public void setProductId(String productId)
{
this.productId = productId;
}
public String getProductId()
{
return productId;
}
public void setQuantit(String quantit)
{
this.quantit = quantit;
}
public String getQuantit()
{
return quantit;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("trayCode", getTrayCode())
.append("jobId", getJobId())
.append("jobDetailId", getJobDetailId())
.append("productId", getProductId())
.append("quantit", getQuantit())
.toString();
}
}

View File

@@ -0,0 +1,61 @@
package com.ruoyi.out.submit.mapper;
import java.util.List;
import com.ruoyi.out.submit.domain.OutPickSubmit;
/**
* 出库拣选缓存记录Mapper接口
*
* @author ruoyi
* @date 2025-07-10
*/
public interface OutPickSubmitMapper
{
/**
* 查询出库拣选缓存记录
*
* @param id 出库拣选缓存记录主键
* @return 出库拣选缓存记录
*/
public OutPickSubmit selectOutPickSubmitById(Long id);
/**
* 查询出库拣选缓存记录列表
*
* @param outPickSubmit 出库拣选缓存记录
* @return 出库拣选缓存记录集合
*/
public List<OutPickSubmit> selectOutPickSubmitList(OutPickSubmit outPickSubmit);
/**
* 新增出库拣选缓存记录
*
* @param outPickSubmit 出库拣选缓存记录
* @return 结果
*/
public int insertOutPickSubmit(OutPickSubmit outPickSubmit);
/**
* 修改出库拣选缓存记录
*
* @param outPickSubmit 出库拣选缓存记录
* @return 结果
*/
public int updateOutPickSubmit(OutPickSubmit outPickSubmit);
/**
* 删除出库拣选缓存记录
*
* @param id 出库拣选缓存记录主键
* @return 结果
*/
public int deleteOutPickSubmitById(Long id);
/**
* 批量删除出库拣选缓存记录
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteOutPickSubmitByIds(Long[] ids);
}

View File

@@ -0,0 +1,61 @@
package com.ruoyi.out.submit.service;
import java.util.List;
import com.ruoyi.out.submit.domain.OutPickSubmit;
/**
* 出库拣选缓存记录Service接口
*
* @author ruoyi
* @date 2025-07-10
*/
public interface IOutPickSubmitService
{
/**
* 查询出库拣选缓存记录
*
* @param id 出库拣选缓存记录主键
* @return 出库拣选缓存记录
*/
public OutPickSubmit selectOutPickSubmitById(Long id);
/**
* 查询出库拣选缓存记录列表
*
* @param outPickSubmit 出库拣选缓存记录
* @return 出库拣选缓存记录集合
*/
public List<OutPickSubmit> selectOutPickSubmitList(OutPickSubmit outPickSubmit);
/**
* 新增出库拣选缓存记录
*
* @param outPickSubmit 出库拣选缓存记录
* @return 结果
*/
public int insertOutPickSubmit(OutPickSubmit outPickSubmit);
/**
* 修改出库拣选缓存记录
*
* @param outPickSubmit 出库拣选缓存记录
* @return 结果
*/
public int updateOutPickSubmit(OutPickSubmit outPickSubmit);
/**
* 批量删除出库拣选缓存记录
*
* @param ids 需要删除的出库拣选缓存记录主键集合
* @return 结果
*/
public int deleteOutPickSubmitByIds(Long[] ids);
/**
* 删除出库拣选缓存记录信息
*
* @param id 出库拣选缓存记录主键
* @return 结果
*/
public int deleteOutPickSubmitById(Long id);
}

View File

@@ -0,0 +1,93 @@
package com.ruoyi.out.submit.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.out.submit.mapper.OutPickSubmitMapper;
import com.ruoyi.out.submit.domain.OutPickSubmit;
import com.ruoyi.out.submit.service.IOutPickSubmitService;
/**
* 出库拣选缓存记录Service业务层处理
*
* @author ruoyi
* @date 2025-07-10
*/
@Service
public class OutPickSubmitServiceImpl implements IOutPickSubmitService
{
@Autowired
private OutPickSubmitMapper outPickSubmitMapper;
/**
* 查询出库拣选缓存记录
*
* @param id 出库拣选缓存记录主键
* @return 出库拣选缓存记录
*/
@Override
public OutPickSubmit selectOutPickSubmitById(Long id)
{
return outPickSubmitMapper.selectOutPickSubmitById(id);
}
/**
* 查询出库拣选缓存记录列表
*
* @param outPickSubmit 出库拣选缓存记录
* @return 出库拣选缓存记录
*/
@Override
public List<OutPickSubmit> selectOutPickSubmitList(OutPickSubmit outPickSubmit)
{
return outPickSubmitMapper.selectOutPickSubmitList(outPickSubmit);
}
/**
* 新增出库拣选缓存记录
*
* @param outPickSubmit 出库拣选缓存记录
* @return 结果
*/
@Override
public int insertOutPickSubmit(OutPickSubmit outPickSubmit)
{
return outPickSubmitMapper.insertOutPickSubmit(outPickSubmit);
}
/**
* 修改出库拣选缓存记录
*
* @param outPickSubmit 出库拣选缓存记录
* @return 结果
*/
@Override
public int updateOutPickSubmit(OutPickSubmit outPickSubmit)
{
return outPickSubmitMapper.updateOutPickSubmit(outPickSubmit);
}
/**
* 批量删除出库拣选缓存记录
*
* @param ids 需要删除的出库拣选缓存记录主键
* @return 结果
*/
@Override
public int deleteOutPickSubmitByIds(Long[] ids)
{
return outPickSubmitMapper.deleteOutPickSubmitByIds(ids);
}
/**
* 删除出库拣选缓存记录信息
*
* @param id 出库拣选缓存记录主键
* @return 结果
*/
@Override
public int deleteOutPickSubmitById(Long id)
{
return outPickSubmitMapper.deleteOutPickSubmitById(id);
}
}

View File

@@ -73,7 +73,6 @@ public class PdaController extends BaseController {
*/ */
@RequestMapping("/emptyTrayIn") @RequestMapping("/emptyTrayIn")
@ResponseBody @ResponseBody
@Log(title = "空托盘入库", businessType = BusinessType.INSERT)
public AjaxResult emptyTrayIn(@RequestBody TrayCodeMsg trayCodeMsg) { public AjaxResult emptyTrayIn(@RequestBody TrayCodeMsg trayCodeMsg) {
BasWarehouse basWarehouse = basWarehouseService.selectBasWarehouseByWarehouseId(trayCodeMsg.getWarehouseId()); BasWarehouse basWarehouse = basWarehouseService.selectBasWarehouseByWarehouseId(trayCodeMsg.getWarehouseId());
if (basWarehouse == null) { if (basWarehouse == null) {
@@ -87,7 +86,7 @@ public class PdaController extends BaseController {
basCargoSpace.setWarehouseId(trayCodeMsg.getWarehouseId()); basCargoSpace.setWarehouseId(trayCodeMsg.getWarehouseId());
basCargoSpace.setStatus("1"); basCargoSpace.setStatus("1");
List<BasCargoSpace> basCargoSpaces = basCargoSpaceService.selectBasCargoSpaceList(basCargoSpace); List<BasCargoSpace> basCargoSpaces = basCargoSpaceService.selectBasCargoSpaceList(basCargoSpace);
if (basCargoSpaces.size() == 0) { if (basCargoSpaces.isEmpty()) {
return AjaxResult.error("此仓库没有空余货位"); return AjaxResult.error("此仓库没有空余货位");
} else { } else {
trayCodeMsg.setCargoSpaceId(basCargoSpaces.get(0).getCargoSpaceId()); trayCodeMsg.setCargoSpaceId(basCargoSpaces.get(0).getCargoSpaceId());
@@ -122,7 +121,7 @@ public class PdaController extends BaseController {
basStock.setWarehouseId(warehouseId); basStock.setWarehouseId(warehouseId);
List<BasStock> basStockList = basStockService.selectKtpStock(basStock); List<BasStock> basStockList = basStockService.selectKtpStock(basStock);
if (basStockList.size() != 0) { if (!basStockList.isEmpty()) {
return AjaxResult.success(basStockList); return AjaxResult.success(basStockList);
} else { } else {
return AjaxResult.error("此区域没有空托盘库存"); return AjaxResult.error("此区域没有空托盘库存");
@@ -306,7 +305,7 @@ public class PdaController extends BaseController {
public AjaxResult taskList(@RequestBody TrayCodeMsg trayCodeMsg) { public AjaxResult taskList(@RequestBody TrayCodeMsg trayCodeMsg) {
List<BasWarehouse> basWarehouses = basWarehouseService.selectBasWarehouseList(new BasWarehouse()); List<BasWarehouse> basWarehouses = basWarehouseService.selectBasWarehouseList(new BasWarehouse());
List<MydoJob> mydoJobArrayList = new ArrayList<>(); List<MydoJob> mydoJobArrayList = new ArrayList<>();
if(basWarehouses.size() != 0){ if(!basWarehouses.isEmpty()){
for(BasWarehouse basWarehouse : basWarehouses){ for(BasWarehouse basWarehouse : basWarehouses){
@@ -356,7 +355,7 @@ public class PdaController extends BaseController {
mydoJob.setTrayCode(trayCodeMsg.getTrayCode()); mydoJob.setTrayCode(trayCodeMsg.getTrayCode());
mydoJob.setStatus(trayCodeMsg.getStatus()); mydoJob.setStatus(trayCodeMsg.getStatus());
List<MydoJob> mydoJobs = mydoJobService.selectMydoJobList(mydoJob); List<MydoJob> mydoJobs = mydoJobService.selectMydoJobList(mydoJob);
if(mydoJobs.size() == 0){ if(mydoJobs.isEmpty()){
return AjaxResult.error("此托盘没有作业"); return AjaxResult.error("此托盘没有作业");
} }
MydoJobDetail mydoJobDetail = new MydoJobDetail(); MydoJobDetail mydoJobDetail = new MydoJobDetail();
@@ -407,5 +406,16 @@ public class PdaController extends BaseController {
} }
/**
* 绑定料架
* @param trayCodeMakeSure
* @return
*/
@PostMapping("/bindContainer")
@ResponseBody
public AjaxResult bindContainer(@RequestBody TrayCodeMakeSure trayCodeMakeSure) {
return pdaService.bindContainer(trayCodeMakeSure);
}
} }

View File

@@ -35,4 +35,6 @@ public interface PdaService {
AjaxResult outException(TrayCodeMakeSure trayCodeMakeSure); AjaxResult outException(TrayCodeMakeSure trayCodeMakeSure);
AjaxResult agvRequest(BasContainer basContainer); AjaxResult agvRequest(BasContainer basContainer);
AjaxResult bindContainer(TrayCodeMakeSure trayCodeMakeSure);
} }

View File

@@ -26,6 +26,8 @@ import com.ruoyi.out.outStockout.domain.OutStockout;
import com.ruoyi.out.outStockout.service.IOutStockoutService; import com.ruoyi.out.outStockout.service.IOutStockoutService;
import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail; import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail;
import com.ruoyi.out.outStockoutDetail.service.IOutStockoutDetailService; import com.ruoyi.out.outStockoutDetail.service.IOutStockoutDetailService;
import com.ruoyi.out.submit.domain.OutPickSubmit;
import com.ruoyi.out.submit.service.IOutPickSubmitService;
import com.ruoyi.pda.domain.TrayCodeMakeSure; import com.ruoyi.pda.domain.TrayCodeMakeSure;
import com.ruoyi.pda.domain.TrayCodeMsg; import com.ruoyi.pda.domain.TrayCodeMsg;
import com.ruoyi.pda.mapper.PdaMapper; import com.ruoyi.pda.mapper.PdaMapper;
@@ -76,6 +78,8 @@ public class PdaServiceImp implements PdaService {
private BasProductPortMapper basProductPortMapper; private BasProductPortMapper basProductPortMapper;
@Autowired @Autowired
private IBasStockService basStockService; private IBasStockService basStockService;
@Autowired
private IOutPickSubmitService outPickSubmitService;
/** /**
* 空托盘入库 * 空托盘入库
@@ -304,22 +308,26 @@ public class PdaServiceImp implements PdaService {
mydoJobDetailOld.setPickQuantity(oldPickQuantity.add(newPickQuantity).toString()); mydoJobDetailOld.setPickQuantity(oldPickQuantity.add(newPickQuantity).toString());
mydoJobDetailService.updateMydoJobDetail(mydoJobDetailOld); mydoJobDetailService.updateMydoJobDetail(mydoJobDetailOld);
//绑定容器 OutPickSubmit outPickSubmitParam = new OutPickSubmit();
BasContainerDetails basContainerDetailsParam = new BasContainerDetails(); //outPickSubmitParam.setJobId(mydoJob.getJobId());
basContainerDetailsParam.setContainerId(trayCodeMakeSure.getContainerCode()); //outPickSubmitParam.setJobDetailId(mydoJobDetail.getJobDetailId());
basContainerDetailsParam.setProductId(mydoJobDetailOld.getProductId()); outPickSubmitParam.setTrayCode(trayCodeMakeSure.getTrayCode());
List<BasContainerDetails> basContainerDetails = basContainerDetailsService.selectBasContainerDetailsList(basContainerDetailsParam); List<OutPickSubmit> outPickSubmits = outPickSubmitService.selectOutPickSubmitList(outPickSubmitParam);
if (CollUtil.isNotEmpty(basContainerDetails)){ if (outPickSubmits.isEmpty()){
BasContainerDetails oldBasContainerDetails = basContainerDetails.get(0); //存入中间表
oldBasContainerDetails.setQuantity(oldBasContainerDetails.getQuantity()+Convert.toLong(mydoJobDetail.getPickQuantity())); OutPickSubmit outPickSubmit = new OutPickSubmit();
basContainerDetailsService.updateBasContainerDetails(oldBasContainerDetails); outPickSubmit.setJobId(mydoJob.getJobId());
outPickSubmit.setJobDetailId(mydoJobDetail.getJobDetailId());
outPickSubmit.setProductId(mydoJobDetail.getProductId());
outPickSubmit.setQuantit(mydoJobDetail.getPickQuantity());
outPickSubmit.setTrayCode(trayCodeMakeSure.getTrayCode());
outPickSubmitService.insertOutPickSubmit(outPickSubmit);
}else { }else {
BasContainerDetails newBasContainerDetails = new BasContainerDetails(); OutPickSubmit oldOutPickSubmit = outPickSubmits.get(0);
newBasContainerDetails.setContainerId(trayCodeMakeSure.getContainerCode()); oldOutPickSubmit.setQuantit(Convert.toBigDecimal(oldOutPickSubmit.getQuantit()).add(Convert.toBigDecimal(mydoJobDetail.getPickQuantity())).toString());
newBasContainerDetails.setProductId(mydoJobDetail.getProductId()); outPickSubmitService.updateOutPickSubmit(oldOutPickSubmit);
newBasContainerDetails.setQuantity(Convert.toLong(mydoJobDetail.getPickQuantity()));
basContainerDetailsService.insertBasContainerDetails(newBasContainerDetails);
} }
//bindContainer(trayCodeMakeSure, mydoJobDetail, mydoJobDetailOld);
//修改单据实际数量 //修改单据实际数量
String inOrOutDId = mydoJobDetailOld.getInOrOutDId(); String inOrOutDId = mydoJobDetailOld.getInOrOutDId();
@@ -349,6 +357,8 @@ public class PdaServiceImp implements PdaService {
} }
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public AjaxResult checkMakeSure(TrayCodeMakeSure trayCodeMakeSure) { public AjaxResult checkMakeSure(TrayCodeMakeSure trayCodeMakeSure) {
@@ -485,4 +495,52 @@ public class PdaServiceImp implements PdaService {
return null; return null;
} }
@Override
public AjaxResult bindContainer(TrayCodeMakeSure trayCodeMakeSure) {
if (CollUtil.isEmpty(trayCodeMakeSure.getMydoJobDetailList())){
return AjaxResult.warn("请选择提供绑定数量");
}
if (StrUtil.isEmpty(trayCodeMakeSure.getContainerCode())){
return AjaxResult.warn("请选择绑定容器");
}
for (MydoJobDetail mydoJobDetail : trayCodeMakeSure.getMydoJobDetailList()) {
//绑定容器
BasContainerDetails basContainerDetailsParam = new BasContainerDetails();
basContainerDetailsParam.setContainerId(trayCodeMakeSure.getContainerCode());
basContainerDetailsParam.setProductId(mydoJobDetail.getProductId());
List<BasContainerDetails> basContainerDetails = basContainerDetailsService.selectBasContainerDetailsList(basContainerDetailsParam);
if (CollUtil.isNotEmpty(basContainerDetails)){
BasContainerDetails oldBasContainerDetails = basContainerDetails.get(0);
oldBasContainerDetails.setQuantity(oldBasContainerDetails.getQuantity()+Convert.toLong(mydoJobDetail.getPickBindQuantity()));
basContainerDetailsService.updateBasContainerDetails(oldBasContainerDetails);
}else {
BasContainerDetails newBasContainerDetails = new BasContainerDetails();
newBasContainerDetails.setContainerId(trayCodeMakeSure.getContainerCode());
newBasContainerDetails.setProductId(mydoJobDetail.getProductId());
newBasContainerDetails.setQuantity(Convert.toLong(mydoJobDetail.getPickBindQuantity()));
basContainerDetailsService.insertBasContainerDetails(newBasContainerDetails);
}
//减少中间表数量
OutPickSubmit outPickSubmitParam = new OutPickSubmit();
//outPickSubmitParam.setJobId(mydoJobDetail.getJobId());
//outPickSubmitParam.setJobDetailId(mydoJobDetail.getJobDetailId());
outPickSubmitParam.setTrayCode(trayCodeMakeSure.getTrayCode());
List<OutPickSubmit> outPickSubmits = outPickSubmitService.selectOutPickSubmitList(outPickSubmitParam);
for (OutPickSubmit outPickSubmit : outPickSubmits) {
BigDecimal subtract = Convert.toBigDecimal(outPickSubmit.getQuantit()).subtract(Convert.toBigDecimal(mydoJobDetail.getPickBindQuantity()));
if (subtract.compareTo(BigDecimal.ZERO) == 0){
//删除缓存信息
outPickSubmitService.deleteOutPickSubmitById(outPickSubmit.getId());
}else if (subtract.compareTo(BigDecimal.ZERO) < 0){
return AjaxResult.warn("绑定数量不能大于实际数量");
}else {
outPickSubmit.setQuantit(subtract.toString());
outPickSubmitService.updateOutPickSubmit(outPickSubmit);
}
}
}
return AjaxResult.success("绑定成功");
}
} }

View File

@@ -0,0 +1,76 @@
<?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.ruoyi.out.submit.mapper.OutPickSubmitMapper">
<resultMap type="OutPickSubmit" id="OutPickSubmitResult">
<result property="id" column="id" />
<result property="trayCode" column="tray_code" />
<result property="jobId" column="job_id" />
<result property="jobDetailId" column="job_detail_id" />
<result property="productId" column="product_id" />
<result property="quantit" column="quantit" />
</resultMap>
<sql id="selectOutPickSubmitVo">
select id, tray_code, job_id, job_detail_id, product_id, quantit from out_pick_submit
</sql>
<select id="selectOutPickSubmitList" parameterType="OutPickSubmit" resultMap="OutPickSubmitResult">
<include refid="selectOutPickSubmitVo"/>
<where>
<if test="trayCode != null and trayCode != ''"> and tray_code = #{trayCode}</if>
<if test="jobId != null and jobId != ''"> and job_id = #{jobId}</if>
<if test="jobDetailId != null and jobDetailId != ''"> and job_detail_id = #{jobDetailId}</if>
<if test="productId != null and productId != ''"> and product_id = #{productId}</if>
<if test="quantit != null and quantit != ''"> and quantit = #{quantit}</if>
</where>
</select>
<select id="selectOutPickSubmitById" parameterType="Long" resultMap="OutPickSubmitResult">
<include refid="selectOutPickSubmitVo"/>
where id = #{id}
</select>
<insert id="insertOutPickSubmit" parameterType="OutPickSubmit" useGeneratedKeys="true" keyProperty="id">
insert into out_pick_submit
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="trayCode != null">tray_code,</if>
<if test="jobId != null">job_id,</if>
<if test="jobDetailId != null">job_detail_id,</if>
<if test="productId != null">product_id,</if>
<if test="quantit != null">quantit,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="trayCode != null">#{trayCode},</if>
<if test="jobId != null">#{jobId},</if>
<if test="jobDetailId != null">#{jobDetailId},</if>
<if test="productId != null">#{productId},</if>
<if test="quantit != null">#{quantit},</if>
</trim>
</insert>
<update id="updateOutPickSubmit" parameterType="OutPickSubmit">
update out_pick_submit
<trim prefix="SET" suffixOverrides=",">
<if test="trayCode != null">tray_code = #{trayCode},</if>
<if test="jobId != null">job_id = #{jobId},</if>
<if test="jobDetailId != null">job_detail_id = #{jobDetailId},</if>
<if test="productId != null">product_id = #{productId},</if>
<if test="quantit != null">quantit = #{quantit},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteOutPickSubmitById" parameterType="Long">
delete from out_pick_submit where id = #{id}
</delete>
<delete id="deleteOutPickSubmitByIds" parameterType="String">
delete from out_pick_submit where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

View File

@@ -0,0 +1,121 @@
<?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.ruoyi.log.mapper.RequestLogMapper">
<resultMap type="RequestLog" id="RequestLogResult">
<result property="requestId" column="request_id" />
<result property="requestTime" column="request_time" />
<result property="sourceSystem" column="source_system" />
<result property="targetSystem" column="target_system" />
<result property="endpoint" column="endpoint" />
<result property="requestUrl" column="request_url" />
<result property="requestMethod" column="request_method" />
<result property="requestHeaders" column="request_headers" />
<result property="requestBody" column="request_body" />
<result property="responseTime" column="response_time" />
<result property="responseBody" column="response_body" />
<result property="responseStatus" column="response_status" />
<result property="errorDetails" column="error_details" />
<result property="duration" column="duration" />
<result property="isSuccessful" column="Is_successful" />
</resultMap>
<sql id="selectRequestLogVo">
select request_id, request_time, source_system, target_system, endpoint, request_url, request_method, request_headers, request_body, response_time, response_body, response_status, error_details, duration, Is_successful from request_log
</sql>
<select id="selectRequestLogList" parameterType="RequestLog" resultMap="RequestLogResult">
<include refid="selectRequestLogVo"/>
<where>
<if test="requestTime != null and requestTime != ''"> and request_time = #{requestTime}</if>
<if test="sourceSystem != null and sourceSystem != ''"> and source_system = #{sourceSystem}</if>
<if test="targetSystem != null and targetSystem != ''"> and target_system = #{targetSystem}</if>
<if test="endpoint != null and endpoint != ''"> and endpoint = #{endpoint}</if>
<if test="requestUrl != null and requestUrl != ''"> and request_url = #{requestUrl}</if>
<if test="requestMethod != null and requestMethod != ''"> and request_method = #{requestMethod}</if>
<if test="requestHeaders != null and requestHeaders != ''"> and request_headers = #{requestHeaders}</if>
<if test="requestBody != null and requestBody != ''"> and request_body = #{requestBody}</if>
<if test="responseTime != null and responseTime != ''"> and response_time = #{responseTime}</if>
<if test="responseBody != null and responseBody != ''"> and response_body = #{responseBody}</if>
<if test="responseStatus != null and responseStatus != ''"> and response_status = #{responseStatus}</if>
<if test="errorDetails != null and errorDetails != ''"> and error_details = #{errorDetails}</if>
<if test="duration != null and duration != ''"> and duration = #{duration}</if>
<if test="isSuccessful != null and isSuccessful != ''"> and Is_successful = #{isSuccessful}</if>
</where>
</select>
<select id="selectRequestLogByRequestId" parameterType="Long" resultMap="RequestLogResult">
<include refid="selectRequestLogVo"/>
where request_id = #{requestId}
</select>
<insert id="insertRequestLog" parameterType="RequestLog" useGeneratedKeys="true" keyProperty="requestId">
insert into request_log
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="requestTime != null">request_time,</if>
<if test="sourceSystem != null">source_system,</if>
<if test="targetSystem != null">target_system,</if>
<if test="endpoint != null">endpoint,</if>
<if test="requestUrl != null">request_url,</if>
<if test="requestMethod != null">request_method,</if>
<if test="requestHeaders != null">request_headers,</if>
<if test="requestBody != null">request_body,</if>
<if test="responseTime != null">response_time,</if>
<if test="responseBody != null">response_body,</if>
<if test="responseStatus != null">response_status,</if>
<if test="errorDetails != null">error_details,</if>
<if test="duration != null">duration,</if>
<if test="isSuccessful != null">Is_successful,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="requestTime != null">#{requestTime},</if>
<if test="sourceSystem != null">#{sourceSystem},</if>
<if test="targetSystem != null">#{targetSystem},</if>
<if test="endpoint != null">#{endpoint},</if>
<if test="requestUrl != null">#{requestUrl},</if>
<if test="requestMethod != null">#{requestMethod},</if>
<if test="requestHeaders != null">#{requestHeaders},</if>
<if test="requestBody != null">#{requestBody},</if>
<if test="responseTime != null">#{responseTime},</if>
<if test="responseBody != null">#{responseBody},</if>
<if test="responseStatus != null">#{responseStatus},</if>
<if test="errorDetails != null">#{errorDetails},</if>
<if test="duration != null">#{duration},</if>
<if test="isSuccessful != null">#{isSuccessful},</if>
</trim>
</insert>
<update id="updateRequestLog" parameterType="RequestLog">
update request_log
<trim prefix="SET" suffixOverrides=",">
<if test="requestTime != null">request_time = #{requestTime},</if>
<if test="sourceSystem != null">source_system = #{sourceSystem},</if>
<if test="targetSystem != null">target_system = #{targetSystem},</if>
<if test="endpoint != null">endpoint = #{endpoint},</if>
<if test="requestUrl != null">request_url = #{requestUrl},</if>
<if test="requestMethod != null">request_method = #{requestMethod},</if>
<if test="requestHeaders != null">request_headers = #{requestHeaders},</if>
<if test="requestBody != null">request_body = #{requestBody},</if>
<if test="responseTime != null">response_time = #{responseTime},</if>
<if test="responseBody != null">response_body = #{responseBody},</if>
<if test="responseStatus != null">response_status = #{responseStatus},</if>
<if test="errorDetails != null">error_details = #{errorDetails},</if>
<if test="duration != null">duration = #{duration},</if>
<if test="isSuccessful != null">Is_successful = #{isSuccessful},</if>
</trim>
where request_id = #{requestId}
</update>
<delete id="deleteRequestLogByRequestId" parameterType="Long">
delete from request_log where request_id = #{requestId}
</delete>
<delete id="deleteRequestLogByRequestIds" parameterType="String">
delete from request_log where request_id in
<foreach item="requestId" collection="array" open="(" separator="," close=")">
#{requestId}
</foreach>
</delete>
</mapper>

View File

@@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询接口记录列表
export function listLog(query) {
return request({
url: '/requestInterface/log/list',
method: 'get',
params: query
})
}
// 查询接口记录详细
export function getLog(requestId) {
return request({
url: '/requestInterface/log/' + requestId,
method: 'get'
})
}
// 新增接口记录
export function addLog(data) {
return request({
url: '/requestInterface/log',
method: 'post',
data: data
})
}
// 修改接口记录
export function updateLog(data) {
return request({
url: '/requestInterface/log',
method: 'put',
data: data
})
}
// 删除接口记录
export function delLog(requestId) {
return request({
url: '/requestInterface/log/' + requestId,
method: 'delete'
})
}

View File

@@ -0,0 +1,344 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="请求参数" prop="requestBody">
<el-input
v-model="queryParams.requestBody"
placeholder="请输入请求参数"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="错误信息" prop="errorDetails">
<el-input
v-model="queryParams.errorDetails"
placeholder="请输入错误信息"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="是否成功" prop="isSuccessful">
<el-select v-model="queryParams.isSuccessful" placeholder="请选择是否成功" clearable>
<el-option
v-for="dict in dict.type.sys_yes_no"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['requestInterface:log:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['requestInterface:log:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['requestInterface:log:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['requestInterface:log:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="logList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="请求id" align="center" prop="requestId" />
<el-table-column label="请求时间" align="center" prop="requestTime" />
<el-table-column label="来源系统" align="center" prop="sourceSystem" />
<el-table-column label="目标系统" align="center" prop="targetSystem" />
<el-table-column label="接口名称" align="center" prop="endpoint" />
<el-table-column label="请求URL" align="center" prop="requestUrl" />
<el-table-column label="请求方式" align="center" prop="requestMethod" />
<el-table-column label="请求头信息" align="center" prop="requestHeaders" />
<el-table-column label="请求参数" align="center" prop="requestBody" />
<el-table-column label="响应时间" align="center" prop="responseTime" />
<el-table-column label="响应主体" align="center" prop="responseBody" />
<el-table-column label="响应状态" align="center" prop="responseStatus" />
<el-table-column label="错误信息" align="center" prop="errorDetails" />
<el-table-column label="耗时" align="center" prop="duration" />
<el-table-column label="是否成功" align="center" prop="isSuccessful">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_yes_no" :value="scope.row.isSuccessful"/>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['requestInterface:log:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['requestInterface:log:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改接口记录对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="来源系统" prop="sourceSystem">
<el-input v-model="form.sourceSystem" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="目标系统" prop="targetSystem">
<el-input v-model="form.targetSystem" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="接口名称" prop="endpoint">
<el-input v-model="form.endpoint" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="请求URL" prop="requestUrl">
<el-input v-model="form.requestUrl" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="请求方式" prop="requestMethod">
<el-input v-model="form.requestMethod" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="请求头信息" prop="requestHeaders">
<el-input v-model="form.requestHeaders" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="请求参数" prop="requestBody">
<el-input v-model="form.requestBody" placeholder="请输入请求参数" />
</el-form-item>
<el-form-item label="响应主体" prop="responseBody">
<el-input v-model="form.responseBody" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="错误信息" prop="errorDetails">
<el-input v-model="form.errorDetails" placeholder="请输入错误信息" />
</el-form-item>
<el-form-item label="耗时" prop="duration">
<el-input v-model="form.duration" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="是否成功" prop="isSuccessful">
<el-select v-model="form.isSuccessful" placeholder="请选择是否成功">
<el-option
v-for="dict in dict.type.sys_yes_no"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listLog, getLog, delLog, addLog, updateLog } from "@/api/requestInterface/log"
export default {
name: "Log",
dicts: ['sys_yes_no'],
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 接口记录表格数据
logList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
requestTime: null,
sourceSystem: null,
targetSystem: null,
endpoint: null,
requestUrl: null,
requestMethod: null,
requestHeaders: null,
requestBody: null,
responseTime: null,
responseBody: null,
responseStatus: null,
errorDetails: null,
duration: null,
isSuccessful: null
},
// 表单参数
form: {},
// 表单校验
rules: {
}
}
},
created() {
this.getList()
},
methods: {
/** 查询接口记录列表 */
getList() {
this.loading = true
listLog(this.queryParams).then(response => {
this.logList = response.rows
this.total = response.total
this.loading = false
})
},
// 取消按钮
cancel() {
this.open = false
this.reset()
},
// 表单重置
reset() {
this.form = {
requestId: null,
requestTime: null,
sourceSystem: null,
targetSystem: null,
endpoint: null,
requestUrl: null,
requestMethod: null,
requestHeaders: null,
requestBody: null,
responseTime: null,
responseBody: null,
responseStatus: null,
errorDetails: null,
duration: null,
isSuccessful: null
}
this.resetForm("form")
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm")
this.handleQuery()
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.requestId)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
this.open = true
this.title = "添加接口记录"
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const requestId = row.requestId || this.ids
getLog(requestId).then(response => {
this.form = response.data
this.open = true
this.title = "修改接口记录"
})
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.requestId != null) {
updateLog(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
this.open = false
this.getList()
})
} else {
addLog(this.form).then(response => {
this.$modal.msgSuccess("新增成功")
this.open = false
this.getList()
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const requestIds = row.requestId || this.ids
this.$modal.confirm('是否确认删除接口记录编号为"' + requestIds + '"的数据项?').then(function() {
return delLog(requestIds)
}).then(() => {
this.getList()
this.$modal.msgSuccess("删除成功")
}).catch(() => {})
},
/** 导出按钮操作 */
handleExport() {
this.download('requestInterface/log/export', {
...this.queryParams
}, `log_${new Date().getTime()}.xlsx`)
}
}
}
</script>