|
|
@@ -52,6 +52,7 @@ import com.fs.core.config.WxPayProperties;
|
|
|
import com.fs.core.utils.OrderCodeUtils;
|
|
|
import com.fs.course.dto.FsOrderDeliveryNoteDTO;
|
|
|
import com.fs.course.dto.OrderOpenIdTransDTO;
|
|
|
+import com.fs.hisStore.dto.DeliveryNoteImportResultDTO;
|
|
|
import com.fs.erp.domain.*;
|
|
|
import com.fs.erp.dto.ErpOrderQueryRequert;
|
|
|
import com.fs.erp.dto.ErpOrderQueryResponse;
|
|
|
@@ -4207,7 +4208,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public R importDeliveryNoteExpress(List<FsStoreOrderDeliveryNoteExportVO> voList, String appId,Integer shipmentType) {
|
|
|
try {
|
|
|
- StringBuilder builder = new StringBuilder();
|
|
|
+ DeliveryNoteImportResultDTO result = new DeliveryNoteImportResultDTO();
|
|
|
//获取商城配置
|
|
|
String json = configService.selectConfigByKey("store.config");
|
|
|
StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
|
|
|
@@ -4221,23 +4222,29 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
for (int i = 0; i < voList.size(); i++) {
|
|
|
FsStoreOrderDeliveryNoteExportVO vo = voList.get(i);
|
|
|
FsOrderDeliveryNoteDTO dto = new FsOrderDeliveryNoteDTO();
|
|
|
+ int rowNum = i + 2;
|
|
|
+
|
|
|
+ // 基础字段校验
|
|
|
if (StringUtils.isEmpty(vo.getOrderNumber())) {
|
|
|
- builder.append("数据第").append(i + 2).append("行系统订单为空!").append(System.lineSeparator());
|
|
|
+ result.addFailure(rowNum, "", vo.getDeliveryId(), "系统订单号为空");
|
|
|
+ continue;
|
|
|
}
|
|
|
if (StringUtils.isEmpty(vo.getLogisticsCompany())) {
|
|
|
- builder.append("数据第").append(i + 2).append("行物流公司为空!").append(System.lineSeparator());
|
|
|
+ result.addFailure(rowNum, vo.getOrderNumber(), vo.getDeliveryId(), "物流公司为空");
|
|
|
+ continue;
|
|
|
}
|
|
|
if (StringUtils.isEmpty(vo.getDeliveryId())) {
|
|
|
- builder.append("数据第").append(i + 2).append("行快递单号为空!").append(System.lineSeparator());
|
|
|
- } else {
|
|
|
- //处理订单ID信息
|
|
|
- String originalOrderNumber = vo.getOrderNumber();
|
|
|
- String processedOrderNumber = extractNumbers(originalOrderNumber);
|
|
|
- dto.setOrderNumber(processedOrderNumber);
|
|
|
- orderCodeList.add(processedOrderNumber);
|
|
|
+ result.addFailure(rowNum, vo.getOrderNumber(), "", "快递单号为空");
|
|
|
+ continue;
|
|
|
}
|
|
|
+
|
|
|
+ //处理订单ID信息
|
|
|
+ String originalOrderNumber = vo.getOrderNumber();
|
|
|
+ String processedOrderNumber = extractNumbers(originalOrderNumber);
|
|
|
+ dto.setOrderNumber(processedOrderNumber);
|
|
|
dto.setDeliveryName(vo.getLogisticsCompany());
|
|
|
dto.setDeliveryId(vo.getDeliveryId());
|
|
|
+ orderCodeList.add(processedOrderNumber);
|
|
|
successList.add(dto);
|
|
|
|
|
|
|
|
|
@@ -4268,7 +4275,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
|
|
|
//批量查询订单信息
|
|
|
if (orderCodeList.isEmpty()) {
|
|
|
- return R.ok(builder.toString());
|
|
|
+ return R.ok(result.buildResultMessage());
|
|
|
}
|
|
|
List<FsStoreOrderCodeOpenIdVo> orderCodeOpenIdVoList = fsStoreOrderMapper.selectOrderCodeOpenIdInOrderCode(orderCodeList);
|
|
|
Map<String, OrderOpenIdTransDTO> orderMap = new HashMap<>(orderCodeOpenIdVoList.size());
|
|
|
@@ -4296,34 +4303,11 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
if (StringUtils.isEmpty(dto.getOrderNumber())) {
|
|
|
continue;
|
|
|
}
|
|
|
-// if (StringUtils.isEmpty(dto.getDeliveryId())) {
|
|
|
-// builder.append("数据第").append(rowNum).append("行快递单号为空!")
|
|
|
-// .append(System.lineSeparator());
|
|
|
-// continue;
|
|
|
-// }
|
|
|
|
|
|
- if (StringUtils.isEmpty(dto.getDeliveryName())) {
|
|
|
- builder.append("数据第").append(rowNum).append("行快递公司编号为空!")
|
|
|
- .append(System.lineSeparator());
|
|
|
- continue;
|
|
|
- }
|
|
|
-// if (dto.getDeliveryStatus() == null) {
|
|
|
-// dto.setDeliveryStatus(0);
|
|
|
-// }
|
|
|
-// if (ObjectUtil.isNotNull(dto.getDeliveryTime())) {
|
|
|
-// dto.setDeliveryTime(parseCstToDateOnlyString(dto.getDeliveryTime()));
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (ObjectUtil.isNotNull(dto.getDeliveryPayTime()) &&
|
|
|
-// !dto.getDeliveryPayTime().isEmpty()) {
|
|
|
-// dto.setDeliveryPayTime(parseCstToDateOnlyString(dto.getDeliveryPayTime()));
|
|
|
-// }
|
|
|
// 验证快递公司
|
|
|
String deliverySn = expressDeliveryMap.get(dto.getDeliveryName());
|
|
|
if (deliverySn == null) {
|
|
|
- builder.append("数据第").append(rowNum).append("行订单号为")
|
|
|
- .append(dto.getOrderNumber()).append("物流公司名称异常")
|
|
|
- .append(System.lineSeparator());
|
|
|
+ result.addFailure(rowNum, dto.getOrderNumber(), dto.getDeliveryId(), "物流公司名称异常");
|
|
|
continue;
|
|
|
}
|
|
|
dto.setDeliverySn(deliverySn);
|
|
|
@@ -4332,22 +4316,25 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
String orderNumber = dto.getOrderNumber();
|
|
|
OrderOpenIdTransDTO orderInfo = orderMap.get(orderNumber);
|
|
|
if (orderInfo == null) {
|
|
|
- builder.append("数据第").append(rowNum).append("行订单号")
|
|
|
- .append(orderNumber).append("不存在").append(System.lineSeparator());
|
|
|
+ result.addFailure(rowNum, orderNumber, dto.getDeliveryId(), "订单号不存在");
|
|
|
continue;
|
|
|
}
|
|
|
//验证是否开启微信发货
|
|
|
if (config.getIsWeChatShipping() != null && config.getIsWeChatShipping()) {
|
|
|
// 上传物流信息到微信
|
|
|
List<FsStoreOrderCodeOpenIdVo> orderDetails = orderDetailsMap.get(orderNumber);
|
|
|
- if (uploadShippingInfoToWechat(wxService, orderInfo, orderDetails, dto, uploadTime,shipmentType)) {
|
|
|
+ WxShippingUploadResult uploadResult = uploadShippingInfoToWechat(wxService, orderInfo, orderDetails, dto, uploadTime,shipmentType);
|
|
|
+ if (uploadResult.isSuccess()) {
|
|
|
updateList.add(dto);
|
|
|
+ result.addSuccess();
|
|
|
} else {
|
|
|
- builder.append("数据第").append(rowNum).append("行订单号为")
|
|
|
- .append(orderNumber).append("上传微信失败").append(System.lineSeparator());
|
|
|
+ // 直接使用错误描述,不展示错误码
|
|
|
+ String failureReason = uploadResult.getErrorDesc();
|
|
|
+ result.addFailure(rowNum, orderNumber, dto.getDeliveryId(), failureReason);
|
|
|
}
|
|
|
} else {
|
|
|
updateList.add(dto);
|
|
|
+ result.addSuccess();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -4356,7 +4343,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
batchUpdateDeliveryNotes(updateList);
|
|
|
}
|
|
|
|
|
|
- return R.ok(builder.toString().equals("") ? "操作成功!" : builder.toString());
|
|
|
+ return R.ok(result.buildResultMessage());
|
|
|
} catch (Exception e) {
|
|
|
log.error("导入发货单快递信息失败", e);
|
|
|
return R.error("导入失败:" + e.getMessage());
|
|
|
@@ -5383,11 +5370,14 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
if (config.getIsWeChatShipping() != null && config.getIsWeChatShipping()) {
|
|
|
// 上传物流信息到微信
|
|
|
List<FsStoreOrderCodeOpenIdVo> orderDetails = orderDetailsMap.get(orderNumber);
|
|
|
- if (uploadShippingInfoToWechat(wxService, orderInfo, orderDetails, dto, uploadTime)) {
|
|
|
+ WxShippingUploadResult uploadResult = uploadShippingInfoToWechat(wxService, orderInfo, orderDetails, dto, uploadTime);
|
|
|
+ if (uploadResult.isSuccess()) {
|
|
|
successList.add(dto);
|
|
|
} else {
|
|
|
+ // 直接使用错误描述,不展示错误码
|
|
|
+ String failureReason = uploadResult.getErrorDesc();
|
|
|
builder.append("数据第").append(rowNum).append("行订单号为")
|
|
|
- .append(orderNumber).append("上传微信失败").append(System.lineSeparator());
|
|
|
+ .append(orderNumber).append(" ").append(failureReason).append(System.lineSeparator());
|
|
|
}
|
|
|
} else {
|
|
|
successList.add(dto);
|
|
|
@@ -5420,7 +5410,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private boolean uploadShippingInfoToWechat(WxMaService wxService,
|
|
|
+ private WxShippingUploadResult uploadShippingInfoToWechat(WxMaService wxService,
|
|
|
OrderOpenIdTransDTO orderInfo,
|
|
|
List<FsStoreOrderCodeOpenIdVo> orderDetails,
|
|
|
FsOrderDeliveryNoteDTO dto,
|
|
|
@@ -5462,11 +5452,11 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
|
|
|
// 上传物流信息
|
|
|
WxMaOrderShippingInfoBaseResponse re = wxService.getWxMaOrderShippingService().upload(request);
|
|
|
- // 使用统一的错误处理工具类
|
|
|
- return WxShippingErrorHandler.handleError(re.getErrCode(), re.getErrMsg(), dto.getOrderNumber());
|
|
|
+ // 使用统一的错误处理工具类(增强版,返回详细错误信息)
|
|
|
+ return WxShippingErrorHandler.handleErrorWithDetail(re.getErrCode(), re.getErrMsg(), dto.getOrderNumber());
|
|
|
} catch (Exception e) {
|
|
|
- // 使用统一的异常错误处理工具类
|
|
|
- return WxShippingErrorHandler.handleExceptionError(e.getMessage(), dto.getOrderNumber());
|
|
|
+ // 使用统一的异常错误处理工具类(增强版,返回详细错误信息)
|
|
|
+ return WxShippingErrorHandler.handleExceptionErrorWithDetail(e.getMessage(), dto.getOrderNumber());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -5700,7 +5690,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
return value == null ? BigDecimal.ZERO : value;
|
|
|
}
|
|
|
|
|
|
- private boolean uploadShippingInfoToWechat(WxMaService wxService,
|
|
|
+ private WxShippingUploadResult uploadShippingInfoToWechat(WxMaService wxService,
|
|
|
OrderOpenIdTransDTO orderInfo,
|
|
|
List<FsStoreOrderCodeOpenIdVo> orderDetails,
|
|
|
FsOrderDeliveryNoteDTO dto,
|
|
|
@@ -5747,11 +5737,11 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
|
|
|
// 上传物流信息
|
|
|
WxMaOrderShippingInfoBaseResponse re = wxService.getWxMaOrderShippingService().upload(request);
|
|
|
- // 使用统一的错误处理工具类
|
|
|
- return WxShippingErrorHandler.handleError(re.getErrCode(), re.getErrMsg(), dto.getOrderNumber());
|
|
|
+ // 使用统一的错误处理工具类(增强版,返回详细错误信息)
|
|
|
+ return WxShippingErrorHandler.handleErrorWithDetail(re.getErrCode(), re.getErrMsg(), dto.getOrderNumber());
|
|
|
} catch (Exception e) {
|
|
|
- // 使用统一的异常错误处理工具类
|
|
|
- return WxShippingErrorHandler.handleExceptionError(e.getMessage(), dto.getOrderNumber());
|
|
|
+ // 使用统一的异常错误处理工具类(增强版,返回详细错误信息)
|
|
|
+ return WxShippingErrorHandler.handleExceptionErrorWithDetail(e.getMessage(), dto.getOrderNumber());
|
|
|
}
|
|
|
}
|
|
|
}
|