|
|
@@ -3,6 +3,8 @@ package com.ruoyi.logistics.service.impl;
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -23,6 +25,7 @@ import com.ruoyi.logistics.constant.JDDictConstants;
|
|
|
import com.ruoyi.logistics.constant.RedisCacheConstants;
|
|
|
import com.ruoyi.logistics.domain.BizAddressBook;
|
|
|
import com.ruoyi.logistics.domain.BizWaybillCostDetails;
|
|
|
+import com.ruoyi.logistics.domain.dto.*;
|
|
|
import com.ruoyi.logistics.domain.SysDeptRate;
|
|
|
import com.ruoyi.logistics.domain.dto.OrderStatisticsDto;
|
|
|
import com.ruoyi.logistics.domain.dto.RecentAddressDto;
|
|
|
@@ -31,16 +34,18 @@ import com.ruoyi.logistics.enums.OrderStatusEnum;
|
|
|
import com.ruoyi.logistics.mapper.BizAddressBookMapper;
|
|
|
import com.ruoyi.logistics.mapper.BizWaybillCostDetailsMapper;
|
|
|
import com.ruoyi.logistics.service.LogisticsOrderService;
|
|
|
+import com.ruoyi.system.api.domain.SysDictData;
|
|
|
import com.ruoyi.system.api.model.LoginUser;
|
|
|
+import com.ruoyi.system.mapper.SysDictDataMapper;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.ruoyi.common.redis.service.RedisService;
|
|
|
import com.ruoyi.logistics.mapper.BizWaybillOrderMapper;
|
|
|
import com.ruoyi.logistics.domain.BizWaybillOrder;
|
|
|
-import com.ruoyi.logistics.domain.dto.DailyOrderStatisticsDto;
|
|
|
import com.ruoyi.logistics.service.IBizWaybillOrderService;
|
|
|
|
|
|
/**
|
|
|
@@ -72,10 +77,10 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
|
|
|
@Autowired
|
|
|
private SysDeptRateServiceImpl sysDeptRateService;
|
|
|
-
|
|
|
@Autowired
|
|
|
- private Kuaidi100Service kuaidi100Service;
|
|
|
-
|
|
|
+ Kuaidi100Service kuaidi100Service;
|
|
|
+ @Autowired
|
|
|
+ private SysDictDataMapper dictDataMapper;
|
|
|
/**
|
|
|
* 查询运单管理
|
|
|
*
|
|
|
@@ -142,10 +147,8 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
bizWaybillOrder.setCreateTime(DateUtils.getNowDate());
|
|
|
bizWaybillOrder.setUserId(loginUser.getUserid());
|
|
|
bizWaybillOrder.setDeptId(loginUser.getSysUser().getDeptId());
|
|
|
-
|
|
|
// 保存寄件地址和收件地址到Redis作为用户最近使用地址
|
|
|
saveRecentAddresses(bizWaybillOrder, loginUser.getUserid());
|
|
|
-
|
|
|
return bizWaybillOrderMapper.insertBizWaybillOrder(bizWaybillOrder);
|
|
|
}
|
|
|
|
|
|
@@ -450,7 +453,7 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
if (dto == null) {
|
|
|
throw new ServiceException("数据异常!订单数据不能为空");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 校验寄件人信息
|
|
|
if (StringUtils.isBlank(dto.getSenderName())) {
|
|
|
throw new ServiceException("数据异常!寄件人姓名不能为空");
|
|
|
@@ -512,7 +515,7 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
} catch (Exception e) {
|
|
|
throw new ServiceException("数据异常!收件详细地址识别有误");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 校验货物信息
|
|
|
if (StringUtils.isBlank(dto.getGoodsName())) {
|
|
|
throw new ServiceException("数据异常!物品名称不能为空");
|
|
|
@@ -526,7 +529,7 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
if (dto.getGoodsQty() == null) {
|
|
|
throw new ServiceException("数据异常!物品数量不能为空");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 校验取件时间
|
|
|
if (dto.getSendStartTime() == null || dto.getSendEndTime() == null) {
|
|
|
throw new ServiceException("数据异常!上门取件开始时间和结束时间不能为空");
|
|
|
@@ -536,7 +539,7 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
if (dto.getPickupStartTime().getTime() > dto.getPickupEndTime().getTime()) {
|
|
|
throw new ServiceException("数据异常!上门取件开始时间不能大于上门取件结束时间");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 校验产品类型
|
|
|
if (StringUtils.isBlank(dto.getProductCode())) {
|
|
|
throw new ServiceException("数据异常!产品类型不能为空");
|
|
|
@@ -544,6 +547,308 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
if (!collect.contains(dto.getProductCode())) {
|
|
|
throw new ServiceException("数据异常!产品类型不存在");
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ @Async
|
|
|
+ @Override
|
|
|
+ public void asyncBatchInsert(List<BizWaybillOrder> orderList, Integer orderType) {
|
|
|
+ String batchNum = redisIdGenerator.generateUniqueId("SFPC");
|
|
|
+
|
|
|
+ int successCount = 0;
|
|
|
+ int failCount = 0;
|
|
|
+ List<String> errorMessages = new ArrayList<>();
|
|
|
+ List<BizWaybillOrder> failList= new ArrayList<>();
|
|
|
+ for (BizWaybillOrder dto : orderList) {
|
|
|
+ try {
|
|
|
+ //还需要校验一下收件地址寄件地址的省市区信息是否合规
|
|
|
+ // ===================== 解析 发件地址 省市区 =====================
|
|
|
+ Map<String, Object> senderParam = new HashMap<>();
|
|
|
+ senderParam.put("param", dto.getSenderAddress());
|
|
|
+ Map<String, Object> senderResultMap = kuaidi100Service.queryIcrExpres(senderParam);
|
|
|
+ Map<String, Object> senderData = (Map<String, Object>) senderResultMap.get("data");
|
|
|
+ List<Map<String, Object>> senderResultList = (List<Map<String, Object>>) senderData.get("result");
|
|
|
+ Map<String, Object> senderResult = senderResultList.get(0);
|
|
|
+ Map<String, Object> senderXzq = (Map<String, Object>) senderResult.get("xzq");
|
|
|
+ // 从 fullName 拆分 省,市,区
|
|
|
+ String senderFullName = (String) senderXzq.get("fullName");
|
|
|
+ String[] senderSplit = senderFullName.split(",");
|
|
|
+ String senderProvince = senderSplit[0];
|
|
|
+ String senderCity = senderSplit[1];
|
|
|
+ String senderDistrict = senderSplit[2];
|
|
|
+ dto.setSenderProvince(senderProvince);
|
|
|
+ dto.setSenderCity(senderCity);
|
|
|
+ dto.setSenderCounty(senderDistrict);
|
|
|
+ // ===================== 解析 收件地址 省市区 =====================
|
|
|
+ Map<String, Object> receiverParam = new HashMap<>();
|
|
|
+ receiverParam.put("param", dto.getReceiverAddress());
|
|
|
+ Map<String, Object> receiverResultMap = kuaidi100Service.queryIcrExpres(receiverParam);
|
|
|
+ Map<String, Object> receiverData = (Map<String, Object>) receiverResultMap.get("data");
|
|
|
+ List<Map<String, Object>> receiverResultList = (List<Map<String, Object>>) receiverData.get("result");
|
|
|
+ Map<String, Object> receiverResult = receiverResultList.get(0);
|
|
|
+ Map<String, Object> receiverXzq = (Map<String, Object>) receiverResult.get("xzq");
|
|
|
+ // 从 fullName 拆分 省,市,区
|
|
|
+ String receiverFullName = (String) receiverXzq.get("fullName");
|
|
|
+ String[] receiverSplit = receiverFullName.split(",");
|
|
|
+ String receiverProvince = receiverSplit[0];
|
|
|
+ String receiverCity = receiverSplit[1];
|
|
|
+ String receiverDistrict = receiverSplit[2];
|
|
|
+ dto.setReceiverProvince(receiverProvince);
|
|
|
+ dto.setReceiverCity(receiverCity);
|
|
|
+ dto.setReceiverCounty(receiverDistrict);
|
|
|
+
|
|
|
+ // 调用下单接口
|
|
|
+ JSONObject orderObject = logisticsOrderService.createOrder(dto);
|
|
|
+ if (!orderObject.getBooleanValue("success")) {
|
|
|
+ log.warn("下单失败!发件人:{}, 收件人:{}, 原因:{}",
|
|
|
+ dto.getSenderName(), dto.getReceiverName(), orderObject.getString("msg"));
|
|
|
+ failCount++;
|
|
|
+ errorMessages.add(String.format("订单 %s-%s 下单失败:%s",
|
|
|
+ dto.getSenderName(), dto.getReceiverName(), orderObject.getString("msg")));
|
|
|
+ failList.add(dto);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //顺丰物流返回的运单号
|
|
|
+ JSONArray waybillNoArray=orderObject.getJSONArray("data");
|
|
|
+ for (int i = 0; i < waybillNoArray.size(); i++) {
|
|
|
+ JSONObject waybillNoJSONObject = waybillNoArray.getJSONObject(i);
|
|
|
+ int waybillType = waybillNoJSONObject.getIntValue("waybillType");
|
|
|
+ String waybillNo = waybillNoJSONObject.getString("waybillNo");
|
|
|
+ if(waybillType==1){
|
|
|
+ dto.setExternalWaybillNo(waybillNo) ;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 设置默认值
|
|
|
+ dto.setPickupType(1);
|
|
|
+ dto.setCreateTime(DateUtils.getNowDate());
|
|
|
+ dto.setBatchNum(batchNum);
|
|
|
+
|
|
|
+ // 保存到数据库
|
|
|
+ int result = bizWaybillOrderMapper.insertBizWaybillOrder(dto);
|
|
|
+ if (result > 0) {
|
|
|
+ successCount++;
|
|
|
+ // 保存最近使用地址
|
|
|
+ saveRecentAddresses(dto, dto.getUserId());
|
|
|
+ } else {
|
|
|
+ failCount++;
|
|
|
+ errorMessages.add(String.format("订单 %s-%s 保存失败",
|
|
|
+ dto.getSenderName(), dto.getReceiverName()));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("批量下单异常!发件人:{}, 收件人:{}",
|
|
|
+ dto.getSenderName(), dto.getReceiverName(), e);
|
|
|
+ failCount++;
|
|
|
+ errorMessages.add(String.format("订单 %s-%s 异常:%s",
|
|
|
+ dto.getSenderName(), dto.getReceiverName(), e.getMessage()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("批量下单完成!总数:{}, 成功:{}, 失败:{}", orderList.size(), successCount, failCount);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String,Object> validateAndGetError(List<SfOrderImportDTO> orderList) {
|
|
|
+ LoginUser loginUser = SecurityUtils.getLoginUser();
|
|
|
+ Map<String,Object> result= new HashMap<>();
|
|
|
+ List<BizWaybillOrder> bizWaybillOrderList= new ArrayList<>();
|
|
|
+ StringBuilder errorMsg = new StringBuilder();
|
|
|
+ List<String> rowErrors = new ArrayList<>();
|
|
|
+ //先把类型拿出来
|
|
|
+ Map productParam= new HashMap<>();
|
|
|
+ productParam.put("dictType","sf_logistics_product_code");
|
|
|
+ productParam.put("deptId",loginUser.getSysUser().getDeptId());
|
|
|
+ List<SysDictData> allProductDictList = dictDataMapper.selectDictDataSfProductList(productParam);
|
|
|
+ // 转成 Map:label -> value,方便快速查找
|
|
|
+ Map<String, String> productMap = allProductDictList.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ SysDictData::getDictLabel,
|
|
|
+ SysDictData::getDictValue,
|
|
|
+ (existing, replacement) -> existing // 重复 label 保留第一个
|
|
|
+ ));
|
|
|
+ for (int i = 0; i < orderList.size(); i++) {
|
|
|
+ SfOrderImportDTO vo = orderList.get(i);
|
|
|
+ int row = i + 2; // 行号从1开始
|
|
|
+ try {
|
|
|
+ if (StringUtils.isBlank(vo.getSenderPhone())) {
|
|
|
+ rowErrors.add("寄件人手机号不能为空");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(vo.getReceiverPhone())) {
|
|
|
+ rowErrors.add("收件人手机号不能为空");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(vo.getReceiverPhone()) || !vo.getReceiverPhone().matches("1[3-9]\\d{9}")) {
|
|
|
+ rowErrors.add("收件人手机号格式不正确");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(vo.getSenderPhone()) || !vo.getSenderPhone().matches("1[3-9]\\d{9}")) {
|
|
|
+ rowErrors.add("寄件人手机号格式不正确");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(vo.getReceiverAddress())) {
|
|
|
+ rowErrors.add("收件地址不能为空");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(vo.getSenderAddress())) {
|
|
|
+ rowErrors.add("寄件地址不能为空");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(vo.getGoodsName())) {
|
|
|
+ rowErrors.add("物品名称不能为空");
|
|
|
+ }
|
|
|
+ // 货物重量校验
|
|
|
+ BigDecimal weight = vo.getGoodsWeight();
|
|
|
+ if (weight == null||weight.compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
+ rowErrors.add("货物重量不能为空,且必须输入大于0的有效数字");
|
|
|
+ }
|
|
|
+ // 货物体积
|
|
|
+ BigDecimal volume = vo.getGoodsVolume();
|
|
|
+ if (volume == null||volume.compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
+ rowErrors.add("货物体积不能为空,且必须输入大于0的有效数字");
|
|
|
+ }
|
|
|
+ Long goodsQty = vo.getGoodsQty();
|
|
|
+ if (goodsQty == null || goodsQty <= 0) {
|
|
|
+ rowErrors.add("货物数量不能为空,且必须输入大于0的有效数字");
|
|
|
+ }
|
|
|
+ String productLabel = vo.getProductCode(); // Excel 传的是中文
|
|
|
+ if (!StringUtils.hasText(productLabel)) {
|
|
|
+ rowErrors.add("产品类型不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ String productCode = productMap.get(productLabel);
|
|
|
+ if (productCode == null) {
|
|
|
+ rowErrors.add("产品类型【" + productLabel + "】不存在,请检查填写是否正确");
|
|
|
+ }
|
|
|
+ vo.setProductCode(productCode);
|
|
|
+
|
|
|
+ /*//还需要校验一下收件地址寄件地址的省市区信息是否合规
|
|
|
+ // ===================== 解析 发件地址 省市区 =====================
|
|
|
+ Map<String, Object> senderParam = new HashMap<>();
|
|
|
+ senderParam.put("param", vo.getSenderAddress());
|
|
|
+ Map<String, Object> senderResultMap = kuaidi100Service.queryIcrExpres(senderParam);
|
|
|
+ Map<String, Object> senderData = (Map<String, Object>) senderResultMap.get("data");
|
|
|
+ List<Map<String, Object>> senderResultList = (List<Map<String, Object>>) senderData.get("result");
|
|
|
+ Map<String, Object> senderResult = senderResultList.get(0);
|
|
|
+ Map<String, Object> senderXzq = (Map<String, Object>) senderResult.get("xzq");
|
|
|
+ // 从 fullName 拆分 省,市,区
|
|
|
+ String senderFullName = (String) senderXzq.get("fullName");
|
|
|
+ String[] senderSplit = senderFullName.split(",");
|
|
|
+ String senderProvince = senderSplit[0];
|
|
|
+ String senderCity = senderSplit[1];
|
|
|
+ String senderDistrict = senderSplit[2];
|
|
|
+ vo.setSenderProvince(senderProvince);
|
|
|
+ vo.setSenderCity(senderCity);
|
|
|
+ vo.setSenderCounty(senderDistrict);
|
|
|
+ // ===================== 解析 收件地址 省市区 =====================
|
|
|
+ Map<String, Object> receiverParam = new HashMap<>();
|
|
|
+ receiverParam.put("param", vo.getReceiverAddress());
|
|
|
+ Map<String, Object> receiverResultMap = kuaidi100Service.queryIcrExpres(receiverParam);
|
|
|
+ Map<String, Object> receiverData = (Map<String, Object>) receiverResultMap.get("data");
|
|
|
+ List<Map<String, Object>> receiverResultList = (List<Map<String, Object>>) receiverData.get("result");
|
|
|
+ Map<String, Object> receiverResult = receiverResultList.get(0);
|
|
|
+ Map<String, Object> receiverXzq = (Map<String, Object>) receiverResult.get("xzq");
|
|
|
+ // 从 fullName 拆分 省,市,区
|
|
|
+ String receiverFullName = (String) receiverXzq.get("fullName");
|
|
|
+ String[] receiverSplit = receiverFullName.split(",");
|
|
|
+ String receiverProvince = receiverSplit[0];
|
|
|
+ String receiverCity = receiverSplit[1];
|
|
|
+ String receiverDistrict = receiverSplit[2];
|
|
|
+ vo.setReceiverProvince(receiverProvince);
|
|
|
+ vo.setReceiverCity(receiverCity);
|
|
|
+ vo.setReceiverCounty(receiverDistrict);*/
|
|
|
+ //这里拿到生成的id进行前置校验用 如果全部通过的时候 这个还需要用到
|
|
|
+ String orderId = redisIdGenerator.generateUniqueId("RJSD");
|
|
|
+ vo.setWaybillNo(orderId);
|
|
|
+
|
|
|
+ //全部校验完后在进行 下单前置校验
|
|
|
+ BizWaybillOrder bizWaybillOrder = convertToSFBizWaybillOrder(vo, loginUser);
|
|
|
+ JSONObject jsonObject = logisticsOrderService.precheckOrder(bizWaybillOrder);
|
|
|
+ if (!jsonObject.getBooleanValue("success")) {
|
|
|
+ log.warn("订单前置校验未通过!发件人:{}, 收件人:{}, 原因:{}",
|
|
|
+ vo.getSenderName(), vo.getReceiverName(), jsonObject.getString("msg"));
|
|
|
+ rowErrors.add("订单前置校验未通过 原因:"+jsonObject.getString("msg"));
|
|
|
+ }
|
|
|
+ bizWaybillOrderList.add(bizWaybillOrder);
|
|
|
+ if (!rowErrors.isEmpty()) {
|
|
|
+ errorMsg.append("第").append(row).append("行:")
|
|
|
+ .append(String.join(",", rowErrors)) // 用逗号拼接所有错误
|
|
|
+ .append("\n");
|
|
|
+ continue; // 跳过这一行,不进正常列表
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 拼接错误:第X行 + 原因
|
|
|
+ errorMsg.append("第").append(row).append("行:").append(e.getMessage()).append("\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ result.put("errorMsg",errorMsg);
|
|
|
+ result.put("orederList",bizWaybillOrderList);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将 SfOrderImportDTO 转换为 BizWaybillOrder
|
|
|
+ */
|
|
|
+
|
|
|
+ private BizWaybillOrder convertToSFBizWaybillOrder(SfOrderImportDTO dto, LoginUser loginUser) {
|
|
|
+
|
|
|
+ BizWaybillOrder bizWaybillOrder = new BizWaybillOrder();
|
|
|
+ // 设置订单类型
|
|
|
+ bizWaybillOrder.setOrderType(2);
|
|
|
+ bizWaybillOrder.setWaybillNo(dto.getWaybillNo());
|
|
|
+ // 寄件人信息
|
|
|
+ bizWaybillOrder.setSenderName(dto.getSenderName());
|
|
|
+ bizWaybillOrder.setSenderPhone(dto.getSenderPhone());
|
|
|
+ bizWaybillOrder.setSenderProvince(dto.getSenderProvince());
|
|
|
+ bizWaybillOrder.setSenderCity(dto.getSenderCity());
|
|
|
+ bizWaybillOrder.setSenderCounty(dto.getSenderCounty());
|
|
|
+ bizWaybillOrder.setSenderAddress(dto.getSenderAddress());
|
|
|
+ //收件人信息
|
|
|
+ bizWaybillOrder.setReceiverName(dto.getReceiverName());
|
|
|
+ bizWaybillOrder.setReceiverPhone(dto.getReceiverPhone());
|
|
|
+ bizWaybillOrder.setReceiverProvince(dto.getReceiverProvince());
|
|
|
+ bizWaybillOrder.setReceiverCity(dto.getReceiverCity());
|
|
|
+ bizWaybillOrder.setReceiverCounty(dto.getReceiverCounty());
|
|
|
+ bizWaybillOrder.setReceiverAddress(dto.getReceiverAddress());
|
|
|
+ // 货物信息
|
|
|
+ bizWaybillOrder.setGoodsName(dto.getGoodsName());
|
|
|
+ bizWaybillOrder.setGoodsWeight(dto.getGoodsWeight());
|
|
|
+ bizWaybillOrder.setGoodsVolume(dto.getGoodsVolume());
|
|
|
+ bizWaybillOrder.setGoodsQty(dto.getGoodsQty());
|
|
|
+ // 取件时间
|
|
|
+ bizWaybillOrder.setSendStartTime(dto.getSendStartTime());
|
|
|
+ //结束时间需要计算出来
|
|
|
+ //bizWaybillOrder.setSendEndTime(dto.getSendEndTime());
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ // 先整点归零
|
|
|
+ LocalDateTime hourStart = now.withMinute(0).withSecond(0).withNano(0);
|
|
|
+ // 下一个整点
|
|
|
+ LocalDateTime nextHour = hourStart.plusHours(1);
|
|
|
+ // 结束再+1
|
|
|
+ LocalDateTime endHour = nextHour.plusHours(1);
|
|
|
+ // 转Date给你原有字段用
|
|
|
+ Date startTime = Date.from(nextHour.atZone(ZoneId.systemDefault()).toInstant());
|
|
|
+ Date endTime = Date.from(endHour.atZone(ZoneId.systemDefault()).toInstant());
|
|
|
+ bizWaybillOrder.setSendStartTime(startTime);
|
|
|
+ bizWaybillOrder.setSendEndTime(endTime);
|
|
|
+ // 产品信息和增值服务
|
|
|
+ bizWaybillOrder.setProductCode(dto.getProductCode());
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // 2. 构建保价 JSON 格式(你要的结构)
|
|
|
+ Map<String, Object> serviceMap = new HashMap<>();
|
|
|
+ serviceMap.put("isPack", null); // 固定 null 顺丰没有现在
|
|
|
+ serviceMap.put("guaranteeMoney", dto.getProtecPrice()); // 赋值 Excel 里的报价金额
|
|
|
+ serviceMap.put("isReceiptCollect", null); // 固定 null 顺丰没有现在
|
|
|
+
|
|
|
+ // 3. 转成 JSON 字符串(如果需要存库)
|
|
|
+ String serviceJson = JSON.toJSONString(serviceMap);
|
|
|
+
|
|
|
+ // 4. 赋值给你的实体(你自己对应字段)
|
|
|
+ bizWaybillOrder.setAddedService(serviceJson);
|
|
|
+
|
|
|
+
|
|
|
+ bizWaybillOrder.setDeptId(loginUser.getSysUser().getDeptId());
|
|
|
+ bizWaybillOrder.setUserId(loginUser.getUserid());
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return bizWaybillOrder;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|