出口订单推送-数据推送修改 出口仓单推送

This commit is contained in:
zhaoqing
2026-05-28 18:29:11 +08:00
parent 01c7e3f9b5
commit 1e61760d45
3 changed files with 289 additions and 50 deletions
@@ -4,15 +4,18 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.mhd.common.core.domain.po.UserPo;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.utils.StringUtils;
import com.mhd.common.core.utils.bean.BeanUtils;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.system.api.OmsServiceFeign;
import com.mhd.system.api.SystemServiceFeign;
import com.mhd.system.api.UserServiceFeign;
import com.mhd.system.api.domain.BatchDetailFeignPO;
import com.mhd.system.api.domain.GwLogDTO;
import com.mhd.system.api.domain.StorageLocationFeignPO;
import com.mhd.system.api.domain.cache.AssociationWarehouseCacheDO;
import com.mhd.system.api.domain.cache.SystemServiceCacheUtil;
@@ -21,6 +24,8 @@ import com.mhd.wms.domain.materialMoreDetail.repository.po.MaterialMoreDetailPO;
import com.mhd.wms.domain.pickingMaterialDetail.repository.po.PickingMaterialDetailPO;
import com.mhd.wms.domain.pickingMaterialDetail.repository.todo.PickingMaterialDetailDO;
import com.mhd.wms.domain.pickingMaterialDetail.service.PickingMaterialDetailDomainService;
import com.mhd.wms.domain.pickingOrder.entity.PickingOrder;
import com.mhd.wms.domain.pickingOrder.repository.mapper.PickingOrderMapper;
import com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO;
import com.mhd.wms.domain.pickingOrder.repository.todo.PickingOrderDO;
import com.mhd.wms.domain.pickingOrder.service.PickingOrderDomainService;
@@ -28,13 +33,22 @@ import com.mhd.wms.domain.materialGoodsRule.repository.facade.IMaterialGoodsRule
import com.mhd.wms.domain.outMaterialDetail.repository.facade.IOutMaterialDetailService;
import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail;
import com.mhd.wms.domain.outMaterialDetail.repository.po.OutMaterialDetailPO;
import com.mhd.wms.domain.stockShelfOrder.entity.StockShelfOrder;
import com.mhd.wms.util.ReceiptBatchDetailFilter;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.IOException;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
@@ -60,9 +74,18 @@ public class PickingOrderApplicationService {
@Autowired
private SystemServiceFeign systemServiceFeign;
@Autowired
private OmsServiceFeign omsServiceFeign;
@Autowired
private IMaterialGoodsRuleService materialGoodsRuleService;
@Autowired
private IOutMaterialDetailService outMaterialDetailService;
@Resource
private PickingOrderMapper pickingOrderMapper;
private static final String PUSH_API_URL = "http://10.33.0.100/nagu-erp-api/transfer/pushData";
private static final String API_NAME = "save_qnBill_i";
private static final String VERIFY = "tjPZMT9fwhZRnv+eTXKF75QXmXzCn7phPagmoUQsvsh2ZTWDjuRxHAgcP0GZENHP";
/**
@@ -685,4 +708,144 @@ public class PickingOrderApplicationService {
returnPickingOrderDO.setMaterialDetailList(returnPickingMaterialDetailDOList);
return returnPickingOrderDO;
}
public AjaxResult batchPush(List<Long> idList) {
if (idList == null || idList.isEmpty()) {
return AjaxResult.error("没有数据需要推送");
}
LoginUser loginUser = SecurityUtils.getLoginUser();
Long pushBy = loginUser != null ? loginUser.getUserid() : null;
String pushByName = loginUser != null ? loginUser.getUsername() : null;
Long organizationId = loginUser != null ? loginUser.getUserPo().getOrganizationId() : null;
Long topOrganizationId = loginUser != null ? loginUser.getUserPo().getTopOrganizationId() : null;
String organizationName = loginUser != null ? loginUser.getUserPo().getOrganizationName() : null;
int successCount = 0;
int failCount = 0;
StringBuilder failMsg = new StringBuilder();
for(Long id : idList){
List<Map<String, Object>> bodyList = new ArrayList<>();
// bodyList.add();
GwLogDTO gwLogDTO = new GwLogDTO();
gwLogDTO.setType("出口订单");
gwLogDTO.setBusinessId(id);
gwLogDTO.setRequestBody(com.alibaba.fastjson.JSONObject.toJSONString(bodyList));
gwLogDTO.setResponseBody("");
gwLogDTO.setStatus(1);
gwLogDTO.setSendTime(new Date());
gwLogDTO.setOrganizationId(organizationId);
gwLogDTO.setTopOrganizationId(topOrganizationId);
gwLogDTO.setOrganizationName(organizationName);
gwLogDTO.setCreateBy(pushBy);
gwLogDTO.setCreateTime(new Date());
//gwLogMapper.insert(gwLogDTO);
Long gwLogId = null;
try {
AjaxResult insertResult = omsServiceFeign.insertGwLog(gwLogDTO);
if(insertResult !=null && "200".equals(String.valueOf(insertResult.get("code")))){
Map<?,?>data = (Map<?,?>)insertResult.get("data");
gwLogId = ((Number)data.get("id")).longValue();
}
}catch(Exception e){
log.error("保存Gwlog失败:{}",e.getMessage());
}
updatePushStatus(id, 2, new Date(), pushBy,pushByName);
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(PUSH_API_URL);
StringEntity postingString = new StringEntity(com.alibaba.fastjson.JSONObject.toJSONString(bodyList), "UTF-8");
httpPost.setEntity(postingString);
httpPost.setHeader("Content-type", "application/json");
httpPost.setHeader("apiName", API_NAME);
httpPost.setHeader("verify", VERIFY);
try {
CloseableHttpResponse response = httpClient.execute(httpPost);
String responseString = EntityUtils.toString(response.getEntity());
gwLogDTO.setResponseBody(responseString);
if (response.getStatusLine().getStatusCode() == 200) {
gwLogDTO.setStatus(2);
updatePushStatus(id, 3, new Date(), pushBy,pushByName);
successCount++;
} else {
gwLogDTO.setStatus(3);
gwLogDTO.setErrorMsg(responseString);
updatePushStatus(id, 4, new Date(), pushBy,pushByName);
failCount++;
failMsg.append("id:").append(id).append("失败;");
}
if (gwLogId != null){
gwLogDTO.setLogId(gwLogId);
try{
AjaxResult updateResult = omsServiceFeign.updateGwLog(gwLogDTO);
}catch (Exception e){
log.error("更新GwLog失败:{}",e.getMessage());
}
}
// gwLogMapper.updateById(gwLog);
response.close();
} catch (IOException e) {
gwLogDTO.setStatus(3);
gwLogDTO.setErrorMsg(e.getMessage());
gwLogDTO.setResponseBody("请求异常:" + e.getMessage());
// gwLogMapper.updateById(gwLog);
if (gwLogId != null){
gwLogDTO.setLogId(gwLogId);
try{
AjaxResult updateResult = omsServiceFeign.updateGwLog(gwLogDTO);
}catch (Exception ex){
log.error("更新GwLog失败:{}",ex.getMessage());
}
}
updatePushStatus(id, 4, new Date(), pushBy,pushByName);
failCount++;
failMsg.append("id:").append(id).append("异常:").append(e.getMessage()).append(";");
log.error("保税仓推送异常: id={}, error={}", id, e.getMessage());
} finally {
try {
httpClient.close();
} catch (Exception e) {
log.error("关闭httpClient异常: {}", e.getMessage());
}
}
}
String resultMsg = "推送完成: 成功" + successCount + "条, 失败" + failCount + "";
if (failCount > 0) {
resultMsg += "[" + failMsg.toString() + "]";
}
return AjaxResult.success(resultMsg);
}
private void updatePushStatus(Long id, Integer pushStatus, Date pushTime, Long pushBy,String pushByName) {
PickingOrder entity = new PickingOrder();
entity.setPickingOrderId(id);
entity.setPushStatus(pushStatus);
if (pushTime != null) {
entity.setPushTime(pushTime);
}
if (pushBy != null) {
entity.setPushBy(pushBy);
}
if (pushByName != null) {
entity.setPushByName(pushByName);
}
pickingOrderMapper.updateById(entity);
}
}
@@ -116,4 +116,17 @@ public class PickingOrderApi extends BaseController {
PickingOrderDO pickingOrderDO = pickingOrderAssembler.toDO(pickingOrderDTO);
return toAjax(pickingOrderApplicationService.completePicking(pickingOrderDO));
}
@ApiOperation("批量推送")
@PostMapping("/batchPush")
public AjaxResult batchPush(@RequestBody List<Long> idList){
if(idList == null || idList.isEmpty()){
return AjaxResult.error("没有数据需要推送");
}
return pickingOrderApplicationService.batchPush(idList);
}
}