parent
c2a58aac64
commit
04d44bb961
@ -17,7 +17,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
|
||||
@EnableMomResourceServer
|
||||
@SpringBootApplication(scanBasePackages = {"com.foreverwin.nlv", "com.foreverwin.mom", "com.foreverwin.iep"})
|
||||
// 需配置不然扫不到mes-db的mapper
|
||||
@MapperScan({"com.foreverwin.iep.**.mapper"})
|
||||
@MapperScan({"com.foreverwin.iep.**.mapper","com.foreverwin.nlv.**.mapper"})
|
||||
@EnableAsync
|
||||
public class Application {
|
||||
|
||||
|
||||
@ -134,6 +134,12 @@
|
||||
<artifactId>wms-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.foreverwin</groupId>
|
||||
<artifactId>wms-db</artifactId>
|
||||
<version>4.5.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>qms-api</artifactId>
|
||||
|
||||
@ -0,0 +1,276 @@
|
||||
package com.foreverwin.iep.integration.handler.def.sap;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.foreverwin.iep.common.faas.common.util.StringUtils;
|
||||
import com.foreverwin.iep.integration.constant.Msg;
|
||||
import com.foreverwin.iep.integration.domain.InvokeRequest;
|
||||
import com.foreverwin.iep.integration.domain.InvokeResponse;
|
||||
import com.foreverwin.iep.integration.entity.IntInData;
|
||||
import com.foreverwin.iep.integration.entity.IntInDataLog;
|
||||
import com.foreverwin.iep.integration.service.HandlerService;
|
||||
import com.foreverwin.iep.integration.service.IntInDataLogService;
|
||||
import com.foreverwin.iep.integration.service.IntInDataService;
|
||||
import com.foreverwin.iep.integration.utils.JS;
|
||||
import com.foreverwin.iep.integration.utils.Local;
|
||||
import com.foreverwin.iep.prd.domain.GenerateNextNumberRequest;
|
||||
import com.foreverwin.iep.prd.domain.GenerateNextNumberResponse;
|
||||
import com.foreverwin.iep.prd.feign.RemoteNextNumberService;
|
||||
import com.foreverwin.mom.common.core.constant.SecurityConstants;
|
||||
import com.foreverwin.mom.common.data.tenant.TenantContextHolder;
|
||||
import com.foreverwin.mom.common.security.util.SecurityUtils;
|
||||
import com.foreverwin.nlv.wms.entity.ZwDocument;
|
||||
import com.foreverwin.nlv.wms.entity.ZwDocumentDetail;
|
||||
import com.foreverwin.nlv.wms.entity.ZwPoOrder;
|
||||
import com.foreverwin.nlv.wms.entity.ZwPoOrderDetail;
|
||||
import com.foreverwin.nlv.wms.mapper.ZwDocumentDetailMapper;
|
||||
import com.foreverwin.nlv.wms.mapper.ZwDocumentMapper;
|
||||
import com.foreverwin.nlv.wms.mapper.ZwPoOrderDetailMapper;
|
||||
import com.foreverwin.nlv.wms.mapper.ZwPoOrderMapper;
|
||||
import io.seata.spring.annotation.GlobalTransactional;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* 采购订单同步到MES
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Service("ZMM_MES_FSMM003")
|
||||
public class Fsmm003Service implements HandlerService {
|
||||
|
||||
private final ZwPoOrderMapper zwPoOrderMapper;
|
||||
private final ZwPoOrderDetailMapper zwPoOrderDetailMapper;
|
||||
private final ZwDocumentMapper zwDocumentMapper;
|
||||
private final ZwDocumentDetailMapper zwDocumentDetailMapper;
|
||||
private final IntInDataService intInDataService;
|
||||
private final IntInDataLogService intInDataLogService;
|
||||
private final RemoteNextNumberService remoteNextNumberService;
|
||||
|
||||
@Override
|
||||
@GlobalTransactional
|
||||
public InvokeResponse call(InvokeRequest invokeRequest) {
|
||||
String reqId = invokeRequest.getTransSid();
|
||||
JSONObject jsonObject = JS.parseObject(invokeRequest.getMessageContent());
|
||||
JSONObject messageObj = jsonObject.getJSONObject("messageContent");
|
||||
JSONObject result = dealPoDataLogic(messageObj);
|
||||
InvokeResponse response = new InvokeResponse(invokeRequest);
|
||||
response.setTransTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
||||
if ("S".equals(result.getString("MSGTY"))) {
|
||||
response.setResult("S");
|
||||
response.setMessageContent(Msg.SUCCESS);
|
||||
} else {
|
||||
response.setResult("E");
|
||||
response.setMessageContent(result.getString("MSGTX"));
|
||||
}
|
||||
response.setTransSid(reqId);
|
||||
return response;
|
||||
}
|
||||
|
||||
private JSONObject dealPoDataLogic(JSONObject messageObj){
|
||||
JSONObject result = new JSONObject();
|
||||
String msgty = "S";
|
||||
String msgtx = "OK";
|
||||
String msgid = "";
|
||||
String msgno = "";
|
||||
String rvar1 = "";
|
||||
String rvar2 = "";
|
||||
String rvar3 = "";
|
||||
String rvar4 = "";
|
||||
String EBELN = messageObj.getString("EBELN"); // 采购凭证编号
|
||||
String BUKRS = messageObj.getString("BUKRS"); // 公司代码
|
||||
String BSART = messageObj.getString("BSART"); // 采购凭证类型
|
||||
String EKGRP = messageObj.getString("EKGRP"); // 采购组
|
||||
String BEDAT = messageObj.getString("BEDAT"); // 采购凭证日期
|
||||
String LIFNR = messageObj.getString("LIFNR"); // 供应商科目编号
|
||||
String RESWK = messageObj.getString("RESWK"); // 发出工厂
|
||||
String UNSEZ = messageObj.getString("UNSEZ"); // 我方参考
|
||||
String site = "";
|
||||
ZwPoOrder zwPoOrder = new ZwPoOrder();
|
||||
zwPoOrder.setPo(EBELN);
|
||||
zwPoOrder.setBusinessType(BSART);
|
||||
zwPoOrder.setPurchaser(EKGRP);
|
||||
zwPoOrder.setProcurementDate(Local.toLocalDateTime(BEDAT));
|
||||
zwPoOrder.setCustomerNo(LIFNR);
|
||||
zwPoOrder.setNote(UNSEZ);
|
||||
JSONArray linInfoArray = messageObj.getJSONArray("LINE_INFO");
|
||||
if(linInfoArray==null && linInfoArray.size()<1){
|
||||
msgty = "E";
|
||||
msgtx = "行数据不能为空";
|
||||
}else if(!("Z001".equals(BSART) || "ZT01".equals(BSART))){
|
||||
msgty = "E";
|
||||
msgtx = BSART+ "单据类型无法解析";
|
||||
} else{
|
||||
site = linInfoArray.getJSONObject(0).getString("WERKS");
|
||||
ZwPoOrder srcPoOrder = zwPoOrderMapper.selectById(zwPoOrder.getHandle());
|
||||
if(srcPoOrder==null){
|
||||
zwPoOrder.setCreateDate(LocalDateTime.now());
|
||||
zwPoOrder.setCreateUser(SecurityUtils.getUserName());
|
||||
zwPoOrderMapper.insert(zwPoOrder);
|
||||
}else{
|
||||
zwPoOrder.setUpdateDate(LocalDateTime.now());
|
||||
zwPoOrder.setUpdateUser(SecurityUtils.getUserName());
|
||||
zwPoOrderMapper.updateById(zwPoOrder);
|
||||
}
|
||||
boolean allDelete = true;
|
||||
List<ZwPoOrderDetail> detailList = new ArrayList<>();
|
||||
for (int i = 0; i < linInfoArray.size(); i++) {
|
||||
JSONObject linInfoObj = linInfoArray.getJSONObject(i);
|
||||
zwPoOrder.setHandle(ZwPoOrder.genHandle(site,EBELN));
|
||||
ZwPoOrderDetail zwPoOrderDetail = new ZwPoOrderDetail();
|
||||
zwPoOrderDetail.setBseg(linInfoObj.getInteger("EBELP"));
|
||||
zwPoOrderDetail.setMatnr(linInfoObj.getString("MATNR"));
|
||||
zwPoOrderDetail.setNote(linInfoObj.getString("TXZ01"));
|
||||
zwPoOrderDetail.setStoragLocation(linInfoObj.getString("LGORT"));
|
||||
zwPoOrderDetail.setQty(linInfoObj.getBigDecimal("MENGE"));
|
||||
zwPoOrderDetail.setUnit(linInfoObj.getString("MEINS"));
|
||||
zwPoOrderDetail.setUebto(linInfoObj.getString("UEBTO"));
|
||||
zwPoOrderDetail.setUntto(linInfoObj.getString("UNTTO"));
|
||||
if(StringUtils.isNotEmpty(linInfoObj.getString("EINDT"))){
|
||||
zwPoOrderDetail.setEindt(Local.toLocalDateTime(linInfoObj.getString("EINDT")));
|
||||
}
|
||||
zwPoOrderDetail.setKnttp(linInfoObj.getString("KNTTP"));
|
||||
zwPoOrderDetail.setVbeln(linInfoObj.getString("VBELN"));
|
||||
zwPoOrderDetail.setVbelp(linInfoObj.getInteger("VBELP"));
|
||||
zwPoOrderDetail.setPoOrderBo(zwPoOrder.getHandle());
|
||||
zwPoOrderDetail.setState("X".equals(linInfoObj.getString("LOEKZ"))?"D":"A");
|
||||
if("A".equals(zwPoOrderDetail.getState())){
|
||||
allDelete = false;
|
||||
}
|
||||
zwPoOrderDetail.setHandle(ZwPoOrderDetail.genHandle(zwPoOrderDetail.getPoOrderBo(),zwPoOrderDetail.getMatnr(),zwPoOrderDetail.getBseg().toString()));
|
||||
ZwPoOrderDetail srcDetailObj = zwPoOrderDetailMapper.selectById(zwPoOrderDetail.getHandle());
|
||||
if(srcDetailObj == null){
|
||||
zwPoOrderDetail.setCreateDate(LocalDateTime.now());
|
||||
zwPoOrderDetail.setCreateUser(SecurityUtils.getUserName());
|
||||
zwPoOrderDetailMapper.insert(zwPoOrderDetail);
|
||||
}else{
|
||||
zwPoOrderDetail.setUpdateDate(LocalDateTime.now());
|
||||
zwPoOrderDetail.setUpdateUser(SecurityUtils.getUserName());
|
||||
zwPoOrderDetailMapper.updateById(zwPoOrderDetail);
|
||||
}
|
||||
detailList.add(zwPoOrderDetail);
|
||||
}
|
||||
// 如果单据类型为ZT01,还需写入单据表
|
||||
if("ZT01".equals(BSART)){
|
||||
ZwDocument zwDocument = new ZwDocument();
|
||||
zwDocument.setSite(site);
|
||||
String documentBo = "";
|
||||
zwDocument.setDocumentType("PURCHASE_RETURN");
|
||||
zwDocument.setExternalDocumentNo(zwPoOrder.getPo());
|
||||
QueryWrapper<ZwDocument> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.lambda().eq(ZwDocument::getExternalDocumentNo, zwDocument.getExternalDocumentNo());
|
||||
List<ZwDocument> documentList = zwDocumentMapper.selectList(queryWrapper);
|
||||
if(documentList==null || documentList.size()<1){
|
||||
// 全部新增
|
||||
//根据编号规则生成箱号
|
||||
GenerateNextNumberRequest generateNextNumberRequest = new GenerateNextNumberRequest();
|
||||
generateNextNumberRequest.setSite(TenantContextHolder.getTenantId());
|
||||
generateNextNumberRequest.setNextNumberType("ZW_DOCUMENT_NO");
|
||||
generateNextNumberRequest.setNumberOfValues(1);
|
||||
GenerateNextNumberResponse nextNumberResponse = remoteNextNumberService.generate(generateNextNumberRequest, SecurityConstants.FROM_IN).getData();
|
||||
if (nextNumberResponse == null || nextNumberResponse.getIds() == null || nextNumberResponse.getIds().size() == 0) {
|
||||
msgty = "E";
|
||||
msgtx = BSART+ "创建单据号失败";
|
||||
}
|
||||
zwDocument.setDocumentNo(nextNumberResponse.getIds().get(0));
|
||||
zwDocument.setState(allDelete?"CANCEL": "SUBMIT");
|
||||
documentBo = ZwDocument.genHandle(zwDocument.getSite(),zwDocument.getDocumentNo());
|
||||
zwDocument.setHandle(documentBo);
|
||||
zwDocument.setCreateDate(LocalDateTime.now());
|
||||
zwDocument.setCreateUser(SecurityUtils.getUserName());
|
||||
zwDocumentMapper.insert(zwDocument);
|
||||
}else{
|
||||
// 更新
|
||||
ZwDocument srcDocument = documentList.get(0);
|
||||
srcDocument.setState(allDelete?"CANCEL": "SUBMIT");
|
||||
srcDocument.setUpdateDate(LocalDateTime.now());
|
||||
srcDocument.setUpdateUser(SecurityUtils.getUserName());
|
||||
documentBo = srcDocument.getHandle();
|
||||
zwDocumentMapper.updateById(srcDocument);
|
||||
}
|
||||
// 处理明细
|
||||
for (ZwPoOrderDetail zwPoOrderDetail:detailList){
|
||||
ZwDocumentDetail zwDocumentDetail = new ZwDocumentDetail();
|
||||
zwDocumentDetail.setHandle(ZwDocumentDetail.genHandle(documentBo,zwPoOrderDetail.getMatnr(),zwPoOrderDetail.getBseg()));
|
||||
ZwDocumentDetail srcDocumentDetail = zwDocumentDetailMapper.selectById(zwDocumentDetail.getHandle());
|
||||
if(srcDocumentDetail==null){
|
||||
// 新增
|
||||
zwDocumentDetail.setDocumentBo(documentBo);
|
||||
zwDocumentDetail.setItem(zwPoOrderDetail.getMatnr());
|
||||
zwDocumentDetail.setSeq(zwPoOrderDetail.getBseg());
|
||||
zwDocumentDetail.setUnitOfMeasure(zwPoOrderDetail.getUnit());
|
||||
zwDocumentDetail.setApplicationsQuantity(zwPoOrderDetail.getQty());
|
||||
zwDocumentDetail.setState(zwPoOrderDetail.getState());
|
||||
zwDocumentDetail.setSalesOrder(zwPoOrderDetail.getVbeln());
|
||||
zwDocumentDetail.setSalesOrderSeq(zwPoOrderDetail.getVbelp());
|
||||
zwDocumentDetail.setCreateDate(LocalDateTime.now());
|
||||
zwDocumentDetail.setCreateUser(SecurityUtils.getUserName());
|
||||
zwDocumentDetailMapper.insert(zwDocumentDetail);
|
||||
}else{
|
||||
// 修改
|
||||
srcDocumentDetail.setApplicationsQuantity(zwPoOrderDetail.getQty());
|
||||
srcDocumentDetail.setState(zwPoOrderDetail.getState());
|
||||
srcDocumentDetail.setUnitOfMeasure(zwPoOrderDetail.getUnit());
|
||||
srcDocumentDetail.setSalesOrder(zwPoOrderDetail.getVbeln());
|
||||
srcDocumentDetail.setSalesOrderSeq(zwPoOrderDetail.getVbelp());
|
||||
srcDocumentDetail.setUpdateDate(LocalDateTime.now());
|
||||
srcDocumentDetail.setUpdateUser(SecurityUtils.getUserName());
|
||||
zwDocumentDetailMapper.updateById(srcDocumentDetail);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
result.put("MSGTY",msgty);
|
||||
result.put("MSGTX",msgtx);
|
||||
result.put("MSGID",msgid);
|
||||
result.put("MSGNO",msgno);
|
||||
result.put("RVAR1",rvar1);
|
||||
result.put("RVAR2",rvar2);
|
||||
result.put("RVAR3",rvar3);
|
||||
result.put("RVAR4",rvar4);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String validation(InvokeRequest invokeRequest) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void saveLogData(InvokeRequest invokeRequest,InvokeResponse invokeResponse){
|
||||
if(StringUtils.isNotEmpty(invokeRequest.getTransSid())){
|
||||
// 存储日志
|
||||
IntInData intInData = new IntInData();
|
||||
intInData.setSid(invokeRequest.getTransSid());
|
||||
intInData.setRequest(invokeRequest.getMessageContent());
|
||||
intInData.setFunctionName(invokeRequest.getMessageId());
|
||||
intInData.setKeyValue(invokeRequest.getKeyValue());
|
||||
intInData.setFromSystem(invokeRequest.getFromSystem());
|
||||
intInData.setToSystem(invokeRequest.getToSystem());
|
||||
intInData.setRetryCount(0);
|
||||
intInData.setSite(invokeRequest.getSite());
|
||||
intInData.setCreator(SecurityUtils.getUserName());
|
||||
intInData.setDateCreate(LocalDateTime.now());
|
||||
intInDataService.save(intInData);
|
||||
IntInDataLog log = new IntInDataLog();
|
||||
log.setSid(UUID.randomUUID().toString());
|
||||
log.setIntInDataSid(intInData.getSid());
|
||||
log.setCreator(SecurityUtils.getUserName());
|
||||
log.setDateCreate(LocalDateTime.now());
|
||||
log.setSeq(0);
|
||||
log.setMessage(StringUtils.isEmpty(invokeResponse.getMessageContent())?"N/A":invokeResponse.getMessageContent());
|
||||
log.setResponse(invokeResponse.getObjectResponse().toJSONString());
|
||||
log.setState(invokeResponse.getResult());
|
||||
intInDataLogService.save(log);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user