opt:优化倒扣逻辑:改成按明细回传

This commit is contained in:
zhangzq
2026-07-21 11:07:32 +08:00
parent a1bd196ad7
commit 729cc92f31
10 changed files with 113 additions and 48 deletions

View File

@@ -11,7 +11,6 @@ import org.nl.wms.ext_manage.util.ErpUtil;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.dao.ReceiveOutReturn;
import org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.service.IReceiveOutReturnService;
import org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.service.IReceiveOutReturnService;
import org.nl.wms.warehouse_manage.stockReturn.service.IPmStockReturnService;
import org.nl.wms.warehouse_manage.stockReturn.service.dao.PmStockReturn;
import org.nl.wms.warehouse_manage.stockReturn.service.enums.StockReturnStatusEnum;
@@ -57,33 +56,6 @@ public class EasApi {
iPmStockReturnService.save(stockReturn);
}
public void receiveOutAndSaveReceiveTable(ReceiveOutRequest receiveOutRequest){
receiveOutAndSaveReceiveTable(receiveOutRequest, null);
}
public void receiveOutAndSaveReceiveTable(ReceiveOutRequest receiveOutRequest, Long recordId){
log.info("======>请求EAS领料出库单接口" + JSONObject.toJSONString(receiveOutRequest));
JSONObject req = new JSONObject();
req.put("type", "MES");
req.put("method", "DealLLCKBill");
req.put("data", receiveOutRequest);
String status;
String remark;
try {
ErpUtil.create().login().audit(req.toJSONString());
status = StockReturnStatusEnum.SUCESS.getCode();
remark = "回传成功";
} catch (Exception e) {
remark = e.getMessage();
status = StockReturnStatusEnum.FAIL.getCode();
}
if (recordId == null) {
receiveOutReturnService.saveFromRequest(receiveOutRequest, status, remark);
}else {
receiveOutReturnService.updateUploadResult(recordId, status, remark);
}
}
/**
* 查询eas库存
* @param request

View File

@@ -37,5 +37,8 @@ public class ReceiveOutRequest {
private String lotnumber;
private String stockerno;
private String stockername;
private String status;
private String updateTime;
private String remark;
}
}

View File

@@ -76,6 +76,7 @@ public class ErpUtil {
* 审核接口请求
*/
public JSONObject audit(String json){
log.warn("----"+json);
try {
call.clearOperation();
call.setOperationName("dealTask");

View File

@@ -53,6 +53,8 @@ import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMappe
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvMapper;
import org.nl.wms.warehouse_manage.service.dao.mapper.MdPbGroupplateMapper;
import org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.dao.ReceiveOutReturn;
import org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.service.IReceiveOutReturnService;
import org.nl.wms.warehouse_manage.stockReturn.service.IPmStockReturnService;
import org.nl.wms.warehouse_manage.stockReturn.service.dao.PmStockReturn;
import org.nl.wms.warehouse_manage.stockReturn.service.enums.StockReturnStatusEnum;
@@ -90,8 +92,10 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
* 组盘记录
*/
@Autowired
private IMdPbGroupplateService iMdPbGroupplateService; /**
private IMdPbGroupplateService iMdPbGroupplateService;
@Resource
private IReceiveOutReturnService receiveOutReturnService;
/**
* 库区服务
*/
@@ -296,8 +300,6 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
ioStorInvDtl.setSource_bill_code(param.getWorkOrder());
ioStorInvDtl.setSource_bill_type("work_order");
ioStorInvDtls.add(ioStorInvDtl);
// ioStorInvDtlMapper.insert(ioStorInvDtl);
totalQty.add(assignQty);
// 分配
final IOStorInvDis ioStorInvDis = new IOStorInvDis();
@@ -347,7 +349,8 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
receiveOutRequest.setBiztime(LocalDate.now().toString());
receiveOutRequest.setCztype("02");
receiveOutRequest.setEntrys(entrys);
easApi.receiveOutAndSaveReceiveTable(receiveOutRequest);
ReceiveOutReturn entity = receiveOutReturnService.saveFromRequest(
receiveOutRequest, StockReturnStatusEnum.TODO.getCode(), null);
return PdaResponse.requestOk();
}

View File

@@ -41,6 +41,6 @@ public class ReceiveOutReturn implements Serializable {
@TableField("created_by")
private String createdBy;
@TableField("updated_time")
private String updatedTime;
@TableField("update_time")
private String updateTime;
}

View File

@@ -36,4 +36,8 @@ public class ReceiveOutReturnDetail implements Serializable {
private String lotnumber;
private String stockerno;
private String stockername;
@TableField("update_time")
private String updateTime;
private String status;
private String remark;
}

View File

@@ -26,6 +26,10 @@ public interface IReceiveOutReturnService extends IService<ReceiveOutReturn> {
void updateUploadResult(Long id, String status, String remark);
void updateDetailUploadResult(Long detailId, String status,String remark);
void refreshUploadResult(Long id, Boolean sucess);
void uploadErp(ReceiveOutReturn mst);
}

View File

@@ -1,16 +1,20 @@
package org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.ext_manage.api.EasApi;
import org.nl.wms.ext_manage.api.request.ReceiveOutRequest;
import org.nl.wms.ext_manage.service.WmsToErpService;
import org.nl.wms.ext_manage.util.ErpUtil;
import org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.dao.ReceiveOutReturn;
import org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.dao.ReceiveOutReturnDetail;
import org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.dto.ReceiveOutReturnDto;
@@ -19,15 +23,18 @@ import org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.mapper.ReceiveOut
import org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.mapper.ReceiveOutReturnMapper;
import org.nl.wms.warehouse_manage.stockReturn.receiveOutRetur.service.IReceiveOutReturnService;
import org.nl.wms.warehouse_manage.stockReturn.service.enums.StockReturnStatusEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@Service
@Slf4j
public class ReceiveOutReturnServiceImpl extends ServiceImpl<ReceiveOutReturnMapper, ReceiveOutReturn> implements IReceiveOutReturnService {
@Resource
@@ -35,6 +42,9 @@ public class ReceiveOutReturnServiceImpl extends ServiceImpl<ReceiveOutReturnMap
@Resource
private EasApi easApi;
@Autowired
private WmsToErpService wmsToErpService;
@Override
public IPage<ReceiveOutReturn> queryPage(ReceiveOutReturnQuery query, PageQuery page) {
QueryWrapper<ReceiveOutReturn> wrapper = new QueryWrapper<>();
@@ -166,6 +176,8 @@ public class ReceiveOutReturnServiceImpl extends ServiceImpl<ReceiveOutReturnMap
detail.setLotnumber(entry.getLotnumber());
detail.setStockerno(entry.getStockerno());
detail.setStockername(entry.getStockername());
detail.setStatus(StockReturnStatusEnum.TODO.getCode());
detail.setUpdateTime(now);
receiveOutReturnDetailMapper.insert(detail);
}
}
@@ -200,7 +212,7 @@ public class ReceiveOutReturnServiceImpl extends ServiceImpl<ReceiveOutReturnMap
dto.setStatus(entity.getStatus());
dto.setRequestId(entity.getRequestId());
dto.setCreatedBy(entity.getCreatedBy());
dto.setUpdatedTime(entity.getUpdatedTime());
dto.setUpdatedTime(entity.getUpdateTime());
return dto;
}
@@ -243,19 +255,55 @@ public class ReceiveOutReturnServiceImpl extends ServiceImpl<ReceiveOutReturnMap
@Override
@Transactional(rollbackFor = Exception.class)
public void uploadErp(ReceiveOutReturn mst) {
if (mst == null || mst.getId() == null) {
throw new BadRequestException("请选择需要回传的数据");
}
if (mst == null || mst.getId() == null) {throw new BadRequestException("请选择需要回传的数据");}
ReceiveOutReturn entity = this.getById(mst.getId());
if (entity == null) {
throw new BadRequestException("回传记录不存在");
}
if (entity == null) {throw new BadRequestException("回传记录不存在");}
Boolean sucess = Boolean.TRUE;
final Long id = entity.getId();
List<ReceiveOutReturnDetail> details = receiveOutReturnDetailMapper.selectList(new LambdaQueryWrapper<ReceiveOutReturnDetail>()
.eq(ReceiveOutReturnDetail::getReturnId, entity.getId())
.eq(ReceiveOutReturnDetail::getReturnId, id)
.and(wrapper -> wrapper.ne(ReceiveOutReturnDetail::getStatus, StockReturnStatusEnum.SUCESS.getCode())
.or()
.isNull(ReceiveOutReturnDetail::getStatus))
.orderByAsc(ReceiveOutReturnDetail::getSeq)
.orderByAsc(ReceiveOutReturnDetail::getId));
ReceiveOutRequest request = buildRequest(entity, details);
easApi.receiveOutAndSaveReceiveTable(request, entity.getId());
if (details.isEmpty()) {
this.refreshUploadResult(id,sucess);
}else {
final String now = DateUtil.now();
final ErpUtil login = ErpUtil.create().login();
log.info("======>请求EAS领料出库单数据条"+details.size());
for (ReceiveOutReturnDetail detail : details) {
final Long detailId = detail.getId();
String status;
String remark = null;
if (id == null || detailId == null) {
throw new IllegalArgumentException("回传记录ID和明细ID不能为空");
}
final ReceiveOutRequest receiveOutRequest = buildRequest(entity, Collections.singletonList(detail));
try {
JSONObject req = new JSONObject();
req.put("type", "MES");
req.put("method", "DealLLCKBill");
req.put("data", receiveOutRequest);
log.info("======>请求EAS领料出库单接口" + JSONObject.toJSONString(req));
login.audit(req.toJSONString());
status = StockReturnStatusEnum.SUCESS.getCode();
} catch (Exception e) {
sucess = Boolean.FALSE;
log.error("请求EAS领料出库单接口失败回传记录ID{}明细ID{}", id, detailId, e);
status = StockReturnStatusEnum.FAIL.getCode();
remark = e.getMessage();
}
ReceiveOutReturnDetail updateItem = new ReceiveOutReturnDetail();
updateItem.setId(detailId);
updateItem.setStatus(status);
updateItem.setRemark(remark);
updateItem.setUpdateTime(now);
receiveOutReturnDetailMapper.updateById(updateItem);
}
this.refreshUploadResult(id,sucess);
}
}
private ReceiveOutRequest buildRequest(ReceiveOutReturn entity, List<ReceiveOutReturnDetail> details) {
@@ -302,13 +350,35 @@ public class ReceiveOutReturnServiceImpl extends ServiceImpl<ReceiveOutReturnMap
return entrys;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateDetailUploadResult(Long detailId, String status, String remark) {
ReceiveOutReturnDetail detail = new ReceiveOutReturnDetail();
detail.setId(detailId);
detail.setStatus(status);
detail.setRemark(remark);
detail.setUpdateTime(DateUtil.now());
receiveOutReturnDetailMapper.updateById(detail);
}
@Override
public void refreshUploadResult(Long id,Boolean sucess) {
ReceiveOutReturn entity = new ReceiveOutReturn();
entity.setId(id);
entity.setStatus(sucess? StockReturnStatusEnum.SUCESS.getCode() : StockReturnStatusEnum.FAIL.getCode());
entity.setRemark(sucess? "回传成功" : "存在回传失败明细");
entity.setUpdateTime(DateUtil.now());
this.updateById(entity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateUploadResult(Long id, String status, String remark) {
ReceiveOutReturn entity = new ReceiveOutReturn();
entity.setId(id);
entity.setStatus(status);
entity.setRemark(limitText(remark, 1000));
entity.setUpdatedTime(DateUtil.now());
entity.setUpdateTime(DateUtil.now());
this.updateById(entity);
}
}

View File

@@ -51,9 +51,9 @@ spring:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:wms_nlwq}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true
url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3307}/${DB_NAME:wms_standardv2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
url: jdbc:mysql://${DB_HOST:172.30.15.33}:${DB_PORT:3306}/${DB_NAME:wms_nlwq}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
username: ${DB_USER:root}
password: ${DB_PWD:123456}
password: ${DB_PWD:shnl*123}
# password: ${DB_PWD:123456}
druid:
# 基础连接池配置

View File

@@ -112,11 +112,19 @@
</el-descriptions>
<el-table :data="currentRow.details || []" size="mini" style="width: 100%; margin-top: 12px;">
<el-table-column prop="seq" label="行序号" width="80" />
<el-table-column label="回传状态" min-width="140">
<template slot-scope="scope">
{{ statusLabel(scope.row.status) }}
</template>
</el-table-column>
<el-table-column prop="materialno" label="物料编号" min-width="120" />
<el-table-column prop="unitno" label="单位编号" min-width="100" />
<el-table-column prop="qty" label="数量" min-width="100" />
<el-table-column prop="baseqty" label="基础数量" min-width="100" />
<el-table-column prop="warehouseno" label="仓库编号" min-width="120" />
<el-table-column prop="updateTime" label="更新时间" min-width="120" />
<el-table-column prop="remark" label="说明" min-width="120" />
<el-table-column prop="srcbillno" label="源单据编号" min-width="140" />
<el-table-column prop="srcbillno" label="源单据编号" min-width="140" />
<el-table-column prop="lotnumber" label="批号" min-width="100" />
<el-table-column prop="tracknumber" label="追踪号" min-width="120" />
@@ -154,7 +162,7 @@ const createDefaultForm = () => ({
status: '0',
requestId: '',
createdBy: '',
updatedTime: '',
updateTime: '',
details: []
})