refactor(purchase): 重构采购退货流程

- 修改了 ProxyPurchaseReturn、ProxyPurchaseWarehousOrder 和 ProxyPurchaseWarehousWarehouse 类中的逻辑
- 优化了 OnlyImplementProxyOrderUtil 类的实现,支持多个采购类型
- 新增了 QueryU8CEntityUtil 类中的方法,用于查询 U8C 业务流程和收发类别- 在 PoOrderRerturnSonDto 中添加了 ofsPoOrderData 字段,用于关联 OFS采购订单
- 更新了相关测试用例
This commit is contained in:
liuy 2025-01-12 14:22:34 +08:00
parent 46080c7e3b
commit a23f3cfdae
8 changed files with 162 additions and 32 deletions

View File

@ -447,9 +447,9 @@ public class ProxyPurchaseReturn extends PluginBaseEntity {
// 转换基本档案
List<PoOrderRerturnSonDto> poOrderRerturnSonDtos = queryBasicArchives(headerDetailsDtos);
// 代理品牌采购业务流程
BdBusitypeEntity bdBusitypeEntity = u8cOperationFlow();
// BdBusitypeEntity bdBusitypeEntity = u8cOperationFlow();
// 查询采购收发类别
BdRdclEntity bdRdclEntity = rdclUtil.queryRdClObject("102");
// BdRdclEntity bdRdclEntity = rdclUtil.queryRdClObject("102");
if (poOrderRerturnSonDtos != null && poOrderRerturnSonDtos.size() > 0) {
for (int i = 0; i < poOrderRerturnSonDtos.size(); i++) {
@ -461,6 +461,7 @@ public class ProxyPurchaseReturn extends PluginBaseEntity {
//生成业务日期
generateBusinessDate = createGenerateBusinessDate(poOrderSonDto);
OfsPoOrderData ofsPoOrderData = poOrderSonDto.getOfsPoOrderData();//OFS采购订单
BdCorpEntity bdCorpEntity = poOrderSonDto.getBdCorpEntity();//采购公司收货公司
BdDeptdocEntity bdDeptdocEntity = poOrderSonDto.getBdDeptdocEntity();//采购部门
BdPurorgEntity bdPurorgEntity = poOrderSonDto.getBdPurorgEntity();//采购组织
@ -473,6 +474,11 @@ public class ProxyPurchaseReturn extends PluginBaseEntity {
PurchaseReturnOrderHeader header = purchaseReturnOrder.getHeader();
List<PurchaseReturnOrderDetails> details1 = purchaseReturnOrder.getDetails();
//查询对应的U8C业务流程
BdBusitypeEntity bdBusitypeEntity = queryU8CEntityUtil.queryU8cPoOrderRertunOperationFlow(ofsPoOrderData.getHeader().getPurchaseOrderType());
//查询对应的U8C收发类别
BdRdclEntity bdRdclEntity = queryU8CEntityUtil.queryU8cPoOrderRertunSendingReceivCategory(ofsPoOrderData.getHeader().getPurchaseOrderType());
//采购订单表头
PoOrderParentDto poOrderParentDto = new PoOrderParentDto();
poOrderParentDto.setBreturn(true);//确认退货
@ -639,9 +645,10 @@ public class ProxyPurchaseReturn extends PluginBaseEntity {
PurchaseReturnOrderHeader header1 = purchaseReturnOrder.getHeader();
List<PurchaseReturnOrderDetails> details1 = purchaseReturnOrder.getDetails();
//查询OFS采购订单
//2025年1月12日 11:59:10 为什么需要查询OFS采购订单因为O采退订单上没有采购类型字段或者为空所以通过采退订单关联OFS采购订单得到采购类型
OfsPoOrderData ofsPoOrderData = ofsStandardUtil.queryOfsPoOrder(header1.getRefOrderCode());
Assert.notNull(ofsPoOrderData, "根据O退订单管理的采购订单号{}无法匹配到OFS采购订单无法确认「采购类型」", header1.getRefOrderCode());
boolean checkResult = onlyImplementProxyOrder.onlyImplementProxyOrder(ofsPoOrderData, "DLCG");
Assert.notNull(ofsPoOrderData, "根据O采退订单关联的采购订单号{}无法匹配到OFS采购订单无法确认「采购类型」", header1.getRefOrderCode());
boolean checkResult = onlyImplementProxyOrder.onlyImplementProxyOrder(ofsPoOrderData, "DLCG,CPCG");
if (!checkResult) {
continue;
}
@ -759,6 +766,7 @@ public class ProxyPurchaseReturn extends PluginBaseEntity {
poOrderRerturnSonDto.setBdStordocEntity(bdStordocEntityList.get(0));
poOrderRerturnSonDto.setDetails(details);
poOrderRerturnSonDto.setPurchaseReturnOrder(purchaseReturnOrder);
poOrderRerturnSonDto.setOfsPoOrderData(ofsPoOrderData);
BeanUtil.copyPropertiesV2(header, poOrderRerturnSonDto);
poOrderSonDtoArrayList.add(poOrderRerturnSonDto);

View File

@ -627,7 +627,7 @@ public class ProxyPurchaseWarehousOrder extends PluginBaseEntity {
//查询OFS采购订单
// OfsPoOrderData ofsPoOrderData = ofsStandardUtil.queryOfsPoOrder(header.getRefOrderCode());
// Assert.notNull(ofsPoOrderData, "根据O表头编码{}无法匹配到OFS采购订单", header.getRefOrderCode());
boolean checkResult = onlyImplementProxyOrder.onlyImplementProxyOrder(ofsPoOrderData1, "DLCG");
boolean checkResult = onlyImplementProxyOrder.onlyImplementProxyOrder(ofsPoOrderData1, "DLCG,CPCG");
if (!checkResult) {
continue;
}

View File

@ -639,7 +639,7 @@ public class ProxyPurchaseWarehousWarehouse extends PluginBaseEntity {
//查询OFS采购订单
OfsPoOrderData ofsPoOrderData = ofsStandardUtil.queryOfsPoOrder(header.getRefOrderCode());
Assert.notNull(ofsPoOrderData, "根据O表头编码{}无法匹配到OFS采购订单", header.getRefOrderCode());
boolean checkResult = onlyImplementProxyOrder.onlyImplementProxyOrder(ofsPoOrderData, "DLCG");
boolean checkResult = onlyImplementProxyOrder.onlyImplementProxyOrder(ofsPoOrderData, "DLCG,CPCG");
if (!checkResult) {
continue;
}

View File

@ -2,6 +2,7 @@ package com.hzya.frame.plugin.lets.u8cdto;
import com.hzya.frame.plugin.lets.entity.*;
//import com.hzya.frame.ttxofs.dto.ofspoorder.OfsPoOrderData;
import com.hzya.frame.ttxofs.dto.ofspoorder.OfsPoOrderData;
import com.hzya.frame.ttxofs.dto.ofspurchasereturnorder.PurchaseReturnOrder;
import com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.DetailsDto;
import com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDto;
@ -65,7 +66,12 @@ public class PoOrderRerturnSonDto extends HeaderDto {
private BdStordocEntity bdStordocEntity;
/**
* 采退订单
* O采退订单
*/
private PurchaseReturnOrder purchaseReturnOrder;
/**
* O采购订单(关联查询)
*/
private OfsPoOrderData ofsPoOrderData;
}

View File

@ -32,13 +32,17 @@ public class OnlyImplementProxyOrderUtil {
* @author liuyang
*/
public boolean onlyImplementProxyOrder(OfsPoOrderData ofsPoOrderData, String targetName) {
Assert.state(ofsPoOrderData != null, "ofsPoOrderData不能为空");
Assert.notNull(ofsPoOrderData, "ofsPoOrderData不能为空");
Assert.notNull(targetName, "targetName不能为空");
OfsPoOrderHeader header = ofsPoOrderData.getHeader();
List<OfsPoOrderDetails> details = ofsPoOrderData.getDetails();
String purchaseOrderType = header.getPurchaseOrderType();
Assert.notNull(purchaseOrderType, "采购订单{}对应的采购类型(purchaseOrderType)不能为空", header.getCode());
Assert.state(!"".equals(purchaseOrderType), "采购订单{}对应的采购类型(purchaseOrderType)不能为空", header.getCode());
// String targetName = "DLCG";
if (targetName.equals(purchaseOrderType)) {
if (targetName.contains(purchaseOrderType.trim())) {
return true;
}
logger.info("采购订单单号:{} 为:{}不触发代理品牌采购业务流程", header.getCode(), purchaseOrderType);

View File

@ -66,6 +66,7 @@ public class QueryU8CEntityUtil {
return null;
}
}
public BdCorpEntity queryBdCorpByUnitName(String unitName) {
BdCorpEntity entity = new BdCorpEntity();
entity.setDr(0);
@ -83,10 +84,11 @@ public class QueryU8CEntityUtil {
////////////////////////////////////////////////////////////////////////////////////////部门
@Autowired
private IBdDeptdocDao bdDeptdocDao;
/**
* 根据公司主键查询全部部门
*/
public List<BdDeptdocEntity> queryBdDeptDocByPkCorp(String pkCorp){
public List<BdDeptdocEntity> queryBdDeptDocByPkCorp(String pkCorp) {
BdDeptdocEntity entity = new BdDeptdocEntity();
entity.setDr(0);
entity.setPkCorp(pkCorp);
@ -98,7 +100,7 @@ public class QueryU8CEntityUtil {
/**
* 根据公司主键部门编码查询部门
*/
public BdDeptdocEntity queryBdDeptDocByPkCorpAndDeptCode(String pkCorp,String deptCode){
public BdDeptdocEntity queryBdDeptDocByPkCorpAndDeptCode(String pkCorp, String deptCode) {
BdDeptdocEntity entity = new BdDeptdocEntity();
entity.setDr(0);
entity.setPkCorp(pkCorp);
@ -111,10 +113,11 @@ public class QueryU8CEntityUtil {
return null;
}
}
/**
* 根据公司主键部门名称查询部门
*/
public BdDeptdocEntity queryBdDeptDocByPkCorpAndDeptName(String pkCorp,String deptName) {
public BdDeptdocEntity queryBdDeptDocByPkCorpAndDeptName(String pkCorp, String deptName) {
BdDeptdocEntity entity = new BdDeptdocEntity();
entity.setDr(0);
entity.setPkCorp(pkCorp);
@ -427,16 +430,16 @@ public class QueryU8CEntityUtil {
/**
* 根据自定义项列表code查询自定义项
*/
public List<BdDefdocEntity> queryBdDefDocByListCode(String code){
public List<BdDefdocEntity> queryBdDefDocByListCode(String code) {
BdDefdoclistEntity bdDefdoclistEntity = new BdDefdoclistEntity();
bdDefdoclistEntity.setDoclistcode(code);
bdDefdoclistEntity.setDr(0);
bdDefdoclistEntity.setDataSourceCode(ProfilesActiveConstant.LETS_DATE_SOURCE);
List<BdDefdoclistEntity> query = iBdDefdoclistDao.query(bdDefdoclistEntity);
if(query.size()==0){
Assert.state(false,"根据自定义项列表编码:{},未查询到自定义项。");
}else if(query.size()>1){
Assert.state(false,"根据自定义项列表编码:{}查询到多条自定义项。请检查U8C自定义项");
if (query.size() == 0) {
Assert.state(false, "根据自定义项列表编码:{},未查询到自定义项。");
} else if (query.size() > 1) {
Assert.state(false, "根据自定义项列表编码:{}查询到多条自定义项。请检查U8C自定义项");
}
BdDefdoclistEntity bdDefdoclistEntity1 = query.get(0);
@ -445,9 +448,9 @@ public class QueryU8CEntityUtil {
bdDefdocEntity.setDr(0);
bdDefdocEntity.setDataSourceCode(ProfilesActiveConstant.LETS_DATE_SOURCE);
List<BdDefdocEntity> defdocEntityList = iBdDefdocDao.query(bdDefdocEntity);
if(defdocEntityList.size()==0){
if (defdocEntityList.size() == 0) {
return null;
}else{
} else {
return defdocEntityList;
}
}
@ -455,15 +458,15 @@ public class QueryU8CEntityUtil {
/**
* 根据自定义项列表pk查询自定义项
*/
public List<BdDefdocEntity> queryBdDefDocByListPk(String pkDefDocList){
public List<BdDefdocEntity> queryBdDefDocByListPk(String pkDefDocList) {
BdDefdocEntity bdDefdocEntity = new BdDefdocEntity();
bdDefdocEntity.setPkDefdoclist(pkDefDocList);
bdDefdocEntity.setDr(0);
bdDefdocEntity.setDataSourceCode(ProfilesActiveConstant.LETS_DATE_SOURCE);
List<BdDefdocEntity> defdocEntityList = iBdDefdocDao.query(bdDefdocEntity);
if(defdocEntityList.size()==0){
if (defdocEntityList.size() == 0) {
return null;
}else{
} else {
return defdocEntityList;
}
}
@ -471,15 +474,15 @@ public class QueryU8CEntityUtil {
/**
* 根据code查询自定义档案列表
*/
public List<BdDefdoclistEntity> queryBdDefDocListByCode(String code){
public List<BdDefdoclistEntity> queryBdDefDocListByCode(String code) {
BdDefdoclistEntity bdDefdoclistEntity = new BdDefdoclistEntity();
bdDefdoclistEntity.setDoclistcode(code);
bdDefdoclistEntity.setDr(0);
bdDefdoclistEntity.setDataSourceCode(ProfilesActiveConstant.LETS_DATE_SOURCE);
List<BdDefdoclistEntity> defdoclistEntityList = iBdDefdoclistDao.query(bdDefdoclistEntity);
if(defdoclistEntityList.size()==0){
if (defdoclistEntityList.size() == 0) {
return null;
}else {
} else {
return defdoclistEntityList;
}
}
@ -487,15 +490,15 @@ public class QueryU8CEntityUtil {
/**
* 根据name查询自定义档案列表
*/
public List<BdDefdoclistEntity> queryBdDefDocListByName(String name){
public List<BdDefdoclistEntity> queryBdDefDocListByName(String name) {
BdDefdoclistEntity bdDefdoclistEntity = new BdDefdoclistEntity();
bdDefdoclistEntity.setDoclistname(name);
bdDefdoclistEntity.setDr(0);
bdDefdoclistEntity.setDataSourceCode(ProfilesActiveConstant.LETS_DATE_SOURCE);
List<BdDefdoclistEntity> defdoclistEntityList = iBdDefdoclistDao.query(bdDefdoclistEntity);
if(defdoclistEntityList.size()==0){
if (defdoclistEntityList.size() == 0) {
return null;
}else {
} else {
return defdoclistEntityList;
}
}
@ -525,7 +528,7 @@ public class QueryU8CEntityUtil {
/**
* 根据客商名称查询客商基本档案
*/
public BdCubasdocEntity queryBdCubasdocByName(String name){
public BdCubasdocEntity queryBdCubasdocByName(String name) {
BdCubasdocEntity entity = new BdCubasdocEntity();
entity.setCustname(name);
entity.setDr(0L);
@ -537,10 +540,11 @@ public class QueryU8CEntityUtil {
return null;
}
}
/**
* 根据客商编码查询客商基本档案
*/
public BdCubasdocEntity queryBdCubasdocByCode(String code){
public BdCubasdocEntity queryBdCubasdocByCode(String code) {
BdCubasdocEntity entity = new BdCubasdocEntity();
entity.setCustcode(code);
entity.setDr(0L);
@ -556,9 +560,10 @@ public class QueryU8CEntityUtil {
/**
* 根据def1查询客商基本档案
*
* @param def1
*/
public BdCubasdocEntity queryBdCubasdocBydef1(String def1){
public BdCubasdocEntity queryBdCubasdocBydef1(String def1) {
BdCubasdocEntity entity = new BdCubasdocEntity();
entity.setDef1(def1);
entity.setDr(0L);
@ -614,4 +619,65 @@ public class QueryU8CEntityUtil {
}
////////////////////////////////////////////////////////////////////////////////////////客商基本档案
@Autowired
private QueryBdBusitypeUtil queryBdBusitypeUtil;
/**
* 根据O采购类型查询U8C采退业务流程
*
* @author liuyang
*/
public BdBusitypeEntity queryU8cPoOrderRertunOperationFlow(String purchaseOrderType) throws Exception {
Assert.notNull(purchaseOrderType, "purchaseOrderType不能为空");
String processName = null;
if ("DLCG".equals(purchaseOrderType)) {
//O 代理采购
processName = "渠道品牌退货";
} else if ("CPCG".equals(purchaseOrderType)) {
//O 成品采购
processName = "自主品牌退货";
} else {
Assert.state(false, "无法识别的O采购类型{}", purchaseOrderType);
}
BdBusitypeEntity bdBusitypeEntity = queryBdBusitypeUtil.queryBdBusitype(processName);
Assert.notNull(bdBusitypeEntity, "根据业务流程名称({})没有查询到业务流程", processName);
return bdBusitypeEntity;
}
@Autowired
private IBdRdclDao iBdRdclDao;
/**
* 根据O采购类型查询U8C对应的收发类别
*
* @author liuyang
*/
public BdRdclEntity queryU8cPoOrderRertunSendingReceivCategory(String purchaseOrderType) throws Exception {
Assert.notNull(purchaseOrderType, "purchaseOrderType不能为空");
BdRdclEntity bdRdclEntity = new BdRdclEntity();
bdRdclEntity.setDr(0);
bdRdclEntity.setDataSourceCode("lets_u8c");
if ("DLCG".equals(purchaseOrderType)) {
//O 代理采购
bdRdclEntity.setRdcode("0101");
} else if ("CPCG".equals(purchaseOrderType)) {
//O 成品采购
bdRdclEntity.setRdcode("102");
} else {
Assert.state(false, "无法识别的O采购类型{}", purchaseOrderType);
}
List<BdRdclEntity> bdRdclEntityList = iBdRdclDao.query(bdRdclEntity);
if (bdRdclEntityList == null || bdRdclEntityList.size() == 0) {
Assert.state(false, "无法查询到U8C收发类别 收发类别编码:{}", bdRdclEntity.getRdcode());
} else if (bdRdclEntityList.size() >= 2) {
Assert.state(false, "无询到{}个U8C收发类别存在歧义 收发类别编码:{}", bdRdclEntityList.size(), bdRdclEntity.getRdcode());
}
return bdRdclEntityList.get(0);
}
}

View File

@ -25,7 +25,7 @@ public class ProxyPurchaseReturnTest {
@Test
public void startImplement() {
try {
proxyPurchaseReturn.startImplement("LETS-SH2025010800023052");
proxyPurchaseReturn.startImplement("LETS-SH2025010600023310");
// proxyPurchaseReturn.startImplement("2024-01-01 00:00:00", "2024-08-07 23:59:59");

View File

@ -0,0 +1,46 @@
package com.hzya.frame.plugin.lets.util;
import com.hzya.frame.WebappApplication;
import com.hzya.frame.ttxofs.dto.ofspoorder.OfsPoOrderData;
import com.hzya.frame.ttxofs.dto.ofspoorder.OfsPoOrderHeader;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.*;
/**
* @Authorliuyang
* @Packagecom.hzya.frame.plugin.lets.util
* @ProjectkangarooDataCenterV3
* @nameOnlyImplementProxyOrderUtilTest
* @Date2025/1/12 11:30
* @FilenameOnlyImplementProxyOrderUtilTest
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = WebappApplication.class)
public class OnlyImplementProxyOrderUtilTest {
Logger logger = LoggerFactory.getLogger(OnlyImplementProxyOrderUtilTest.class);
@Autowired
private OnlyImplementProxyOrderUtil onlyImplementProxyOrderUtil;
@Test
public void onlyImplementProxyOrder() {
try {
OfsPoOrderData ofsPoOrderData = new OfsPoOrderData();
OfsPoOrderHeader ofsPoOrderHeader = new OfsPoOrderHeader();
ofsPoOrderHeader.setPurchaseOrderType("DLCG");
ofsPoOrderData.setHeader(ofsPoOrderHeader);
boolean b = onlyImplementProxyOrderUtil.onlyImplementProxyOrder(ofsPoOrderData, "DLCG,CPCG");
System.out.println(b);
} catch (Exception e) {
logger.error("onlyImplementProxyOrder抛出异常", e);
}
}
}