Commit edf07683 authored by zhangfeng's avatar zhangfeng

Merge remote-tracking branch 'origin/dev' into dev

parents deea0c7f 5c214da5
......@@ -70,5 +70,5 @@ alter table `ecw_order`
update ecw_order o left join ecw_customer c on c.id = o.customer_id set o.yeji_type = IFNULL(c.is_new, 1);
-- 2027-08-07 仓库路线新增落款信息和图章名称
alter table ecw_warehouse_line add column lk_left varchar(600) COMMENT '左侧落款',add column lk_right varchar(600) COMMENT '右侧落款',add column tz_name varchar(255) COMMENT '图章名称';
alter table ecw_warehouse_line add column lk_left varchar(600) DEFAULT NULL COMMENT '左侧落款',add column lk_right varchar(600) DEFAULT NULL COMMENT '右侧落款',add column tz_name varchar(255) DEFAULT NULL COMMENT '图章名称';
-- 2024-08-24 订单控货现在参数控货订单锁定天数
alter table `ecw_order`
add column `lock_consignee_day` int default 0 COMMENT '锁定收货人天数';
alter table `ecw_order`
add column `lock_consignee_time` datetime default NULL COMMENT '放货锁定收货人到期时间';
alter table `ecw_order`
add column `is_limit_update_consignee` bit default 0 COMMENT '是否限制修改收获人';
\ No newline at end of file
......@@ -72,6 +72,8 @@ public interface WarehouseLineMapper extends BaseMapperX<WarehouseLineDO> {
"ew_start_country.title_zh as start_country_title_zh,",
"ew_start_country.title_en as start_country_title_en,",
"ew_start.volume as start_volume,",
"ew_start.rent_free_days as start_rent_free_days,",
"ew_start.lock_recipient_days as start_lock_recipient_days,",
"ew_start.address_zh as start_address_zh,",
"ew_start.address_en as start_address_en,",
"ew_start.head as start_head,",
......@@ -85,6 +87,8 @@ public interface WarehouseLineMapper extends BaseMapperX<WarehouseLineDO> {
"ew_dest_country.title_zh as dest_country_title_zh,",
"ew_dest_country.title_en as dest_country_title_en,",
"ew_dest.volume as dest_volume,",
"ew_dest.rent_free_days as dest_rent_free_days,",
"ew_dest.lock_recipient_days as dest_lock_recipient_days,",
"ew_dest.address_zh as dest_address_zh,",
"ew_dest.address_en as dest_address_en,",
"ew_dest.head as dest_head,",
......
......@@ -35,6 +35,12 @@ public class LogisticsInfoDto {
@ApiModelProperty(value = "始发地仓库容量")
private String startVolume;
@ApiModelProperty(value = "始发地仓库免租期")
private Integer startRentFreeDays;
@ApiModelProperty(value = "始发地锁定收货人天数")
private Integer startLockRecipientDays;
@ApiModelProperty(value = "始发地仓库仓库地址")
private String startAddressZh;
......@@ -73,6 +79,12 @@ public class LogisticsInfoDto {
@ApiModelProperty(value = "目的地仓库容量")
private String destVolume;
@ApiModelProperty(value = "目的地仓库免租期")
private Integer destRentFreeDays;
@ApiModelProperty(value = "目的地锁定收货人天数")
private Integer destLockRecipientDays;
@ApiModelProperty(value = "目的地仓库仓库地址")
private String destAddressZh;
......
......@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.order.dal.dataobject.orderDeparture.OrderDepartur
import cn.iocoder.yudao.module.order.dal.dataobject.orderItem.OrderItemDO;
import cn.iocoder.yudao.module.order.dal.dataobject.orderObjective.OrderObjectiveDO;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
......@@ -15,10 +16,13 @@ import java.util.*;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 订单 DO
*
......@@ -518,6 +522,17 @@ public class OrderDO extends BaseDO {
@ApiModelProperty(value = "是否有收货人,1-是,0-否")
private Boolean hasConsignee = true;
@ApiModelProperty(value = "是否限制修改收货人")
private Boolean isLimitUpdateConsignee;
@ApiModelProperty(value = "放货锁定收货人到期时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private Date lockConsigneeTime;
@ApiModelProperty(value = "放货锁定收货人天数")
private Integer lockConsigneeDay;
//
// @ApiModelProperty(value = "拆单子订单是否变更运输方式")
// private Boolean splitChangeTransport = false;
......
......@@ -97,6 +97,9 @@ public interface OrderCargoControlMapper extends AbstractMapper<OrderCargoContro
"o.sum_volume, ",
"o.sum_weight, ",
"o.create_time, ",
"o.unload_time, ",
"o.is_limit_update_consignee, ",
"o.lock_consignee_time, ",
"nee.name as consignee_name, ",
"nee.name_en as consignee_name_en, ",
"nee.phone as consignee_phone, ",
......@@ -108,7 +111,6 @@ public interface OrderCargoControlMapper extends AbstractMapper<OrderCargoContro
"occ.email, ",
"occ.dial_code ",
"from ecw_order o ",
// "left join ecw_order_consignor nor on nor.order_id = o.order_id ",
"left join ecw_order_consignee nee on nee.order_id = o.order_id ",
"left join ecw_order_cargo_control occ ",
"on occ.order_id = o.order_id and occ.is_actual = 1 and occ.deleted = 0",
......
......@@ -3,13 +3,18 @@ package cn.iocoder.yudao.module.order.dto;
import cn.iocoder.yudao.module.order.vo.approval.OrderApprovalBackVO;
import cn.iocoder.yudao.module.order.vo.orderCargoControlPick.OrderCargoControlPickBackVO;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Data
@ApiModel(value = "控货订单放货详情返回值")
public class OrderCargoControlReleaseInfoDto {
......@@ -106,6 +111,22 @@ public class OrderCargoControlReleaseInfoDto {
@ApiModelProperty(value = "收货人邮箱")
private String consigneeEmail;
@ApiModelProperty(value = "卸柜/到仓时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private Date unloadTime;
@ApiModelProperty(value = "是否限制修改收货人")
private Boolean isLimitUpdateConsignee;
@ApiModelProperty(value = "放货锁定收货人到期时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private Date lockConsigneeTime;
@ApiModelProperty(value = "放货锁定收货人天数")
private Integer lockConsigneeDay;
@ApiModelProperty(value = "放货详情记录列表")
private List<OrderCargoControlPickBackVO> cargoControlPickBackVOList;
......
......@@ -400,4 +400,6 @@ public interface ErrorCodeConstants {
ErrorCode FREIGHT_UNIT_NOT_NULL = new ErrorCode(1004001158, "order.item.freight.unit.not.null");
ErrorCode CLEARANCE_CURRENCY_NOT_NULL = new ErrorCode(1004001159, "order.item.clearance.currency.not.null");
ErrorCode CLEARANCE_UNIT_NOT_NULL = new ErrorCode(1004001160, "order.item.clearance.unit.not.null");
ErrorCode ORDER_CARGO_CONTROL_LIMIT_UPDATE_CONSIGNEE_ERROR = new ErrorCode(1004001155, "order.cargo.control.limit.update.consignee.error");
ErrorCode ORDER_CARGO_CONTROL_LIMIT_UPDATE_CONSIGNEE_INFO = new ErrorCode(1004001156, "order.cargo.control.limit.update.consignee.info");
}
......@@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.apollo.core.event.*;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.util.bigDecimal.BigDecimalUtils;
import cn.iocoder.yudao.framework.common.util.code.CodeUtils;
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
import cn.iocoder.yudao.framework.i18n.core.I18nMessage;
import cn.iocoder.yudao.framework.mybatis.core.service.AbstractService;
......@@ -469,9 +470,9 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
// 插入订单商品项
this.costCalculation(updater, orderDO,
orderConsignorDO.getCustomerId(),
orderConsigneeDO.getCustomerId(),
Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerId(),
orderConsignorDO.getCustomerContactsId(),
orderConsigneeDO.getCustomerContactsId(),
Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerContactsId(),
orderItemDOList, type);
}
......@@ -512,9 +513,9 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
// 插入订单商品项
this.costCalculation(updater, orderDO,
orderConsignorDO.getCustomerId(),
orderConsigneeDO.getCustomerId(),
Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerId(),
orderConsignorDO.getCustomerContactsId(),
orderConsigneeDO.getCustomerContactsId(),
Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerContactsId(),
orderItemDOList, type);
}
......@@ -567,8 +568,8 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
}
String updater = String.valueOf(loginUser != null ? loginUser.getId() : null);
// 插入订单商品项
this.costCalculation(updater, orderDO, orderConsignorDO.getCustomerId(), orderConsigneeDO.getCustomerId(),
orderConsignorDO.getCustomerContactsId(), orderConsigneeDO.getCustomerContactsId(), orderItemDOList, type);
this.costCalculation(updater, orderDO, orderConsignorDO.getCustomerId(), Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerId(),
orderConsignorDO.getCustomerContactsId(), Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerContactsId(), orderItemDOList, type);
// orderMapper.updateById(orderDO);
}
......@@ -826,9 +827,9 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
// 批量加价计价调整
this.costCalculation(updater,
orderDO, orderConsignorDO.getCustomerId(),
orderConsigneeDO.getCustomerId(),
Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerId(),
orderConsignorDO.getCustomerContactsId(),
orderConsigneeDO.getCustomerContactsId(),
Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerContactsId(),
orderItemDOList, 14);
// 添加出货批量加价日志
......@@ -861,9 +862,9 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
this.costCalculation("0", orderDO,
orderConsignorDO.getCustomerId(),
orderConsigneeDO.getCustomerId(),
Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerId(),
orderConsignorDO.getCustomerContactsId(),
orderConsigneeDO.getCustomerContactsId(),
Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerContactsId(),
orderItemDOList, 30);
this.addOrderOperateLog(orderDO.getOrderId(),
......@@ -1464,14 +1465,20 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
orderTimeDO.setRemarksZh(String.format(orderAirTimeEnum.getRemarksZh(), objective.getTitleZh()));
orderTimeDO.setRemarksEn(String.format(orderAirTimeEnum.getRemarksEn(), objective.getTitleEn()));
}
// TODO 这里更新订单卸柜/到仓时间,同时对控货订单的限制修改收货人锁定到期时间进行更新,当前默认使用14D处理,待仓库业务添加该时间配置在做处理
LogisticsInfoDto logisticsDestInfoDto = warehouseLineMapper.getStartInfoAndDestInfoByLineId(orderDO.getLineId());
int lockConsigneeDay = Objects.nonNull(logisticsDestInfoDto) && Objects.nonNull(logisticsDestInfoDto.getDestLockRecipientDays()) ? logisticsDestInfoDto.getDestLockRecipientDays() : 0;
Date lockConsigneeTime = null;
if (orderDO.getIsCargoControl()) {
// TODO 获取卸柜/到仓业务时间的锁定收货人时间当天的结束时间
lockConsigneeTime = DateUtil.endOfDay(DateUtil.offsetDay(businessTime, lockConsigneeDay));
}
orderMapper.update(null, new LambdaUpdateWrapper<OrderDO>()
.set(OrderDO::getUnloadTime, businessTime)
.set(OrderDO::getLockConsigneeTime, lockConsigneeTime)
.set(OrderDO::getLockConsigneeDay, lockConsigneeDay)
.eq(OrderDO::getOrderId, orderDO.getOrderId()));
// LogisticsInfoDto logisticsDestInfoDto = warehouseLineMapper.getStartInfoAndDestInfoByLineId(orderDO.getLineId());
// if (Objects.nonNull(logisticsDestInfoDto)) {
// orderTimeDO.setRemarksZh(String.format(orderAirTimeEnum.getRemarksZh(), logisticsDestInfoDto.getDestTitleZh()));
// orderTimeDO.setRemarksEn(String.format(orderAirTimeEnum.getRemarksEn(), logisticsDestInfoDto.getDestTitleEn()));
// }
break;
case AIR_UNLOADED_CABINET_DELAY:
orderTimeDO.setRemarksZh(String.format(orderAirTimeEnum.getRemarksZh(), reasonZh));
......@@ -1599,14 +1606,19 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
orderTimeDO.setRemarksZh(String.format(orderSeaTimeEnum.getRemarksZh(), objective.getTitleZh()));
orderTimeDO.setRemarksEn(String.format(orderSeaTimeEnum.getRemarksEn(), objective.getTitleEn()));
}
// TODO 这里更新订单卸柜/到仓时间,同时对控货订单的限制修改收货人锁定到期时间进行更新,当前默认使用14D处理,待仓库业务添加该时间配置在做处理
LogisticsInfoDto logisticsDestInfoDto = warehouseLineMapper.getStartInfoAndDestInfoByLineId(orderDO.getLineId());
int lockConsigneeDay = Objects.nonNull(logisticsDestInfoDto) && Objects.nonNull(logisticsDestInfoDto.getDestLockRecipientDays()) ? logisticsDestInfoDto.getDestLockRecipientDays() : 0;
Date lockConsigneeTime = null;
if (orderDO.getIsCargoControl()) {
// TODO 获取卸柜/到仓业务时间的锁定收货人时间当天的结束时间
lockConsigneeTime = DateUtil.endOfDay(DateUtil.offsetDay(businessTime, lockConsigneeDay));
}
orderMapper.update(null, new LambdaUpdateWrapper<OrderDO>()
.set(OrderDO::getUnloadTime, businessTime)
.set(OrderDO::getLockConsigneeTime, lockConsigneeTime)
.set(OrderDO::getLockConsigneeDay, lockConsigneeDay)
.eq(OrderDO::getOrderId, orderDO.getOrderId()));
// LogisticsInfoDto logisticsDestInfoDto = warehouseLineMapper.getStartInfoAndDestInfoByLineId(orderDO.getLineId());
// if (Objects.nonNull(logisticsDestInfoDto)) {
// orderTimeDO.setRemarksZh(String.format(orderSeaTimeEnum.getRemarksZh(), logisticsDestInfoDto.getDestTitleZh()));
// orderTimeDO.setRemarksEn(String.format(orderSeaTimeEnum.getRemarksEn(), logisticsDestInfoDto.getDestTitleEn()));
// }
break;
case SEA_PICKED_UP:
// 提货节点动态的原因参数分别为提货件数和提货剩余件数
......@@ -1853,8 +1865,8 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
OrderConsignorDO orderConsignorDO = orderConsignorService.getOne(new LambdaQueryWrapper<OrderConsignorDO>().eq(OrderConsignorDO::getOrderId, orderDO.getOrderId()).orderByDesc(OrderConsignorDO::getId).last("limit 1"));
OrderConsigneeDO orderConsigneeDO = orderConsigneeService.getOne(new LambdaQueryWrapper<OrderConsigneeDO>().eq(OrderConsigneeDO::getOrderId, orderDO.getOrderId()).orderByDesc(OrderConsigneeDO::getId).last("limit 1"));
List<OrderItemDO> orderItemDOList = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDO.getOrderId()));
this.costCalculation(userId.toString(), orderDO, orderConsignorDO.getCustomerId(), orderConsigneeDO.getCustomerId(),
orderConsignorDO.getCustomerContactsId(), orderConsigneeDO.getCustomerContactsId(), orderItemDOList, isResetPrice ? 20 : 8);
this.costCalculation(userId.toString(), orderDO, orderConsignorDO.getCustomerId(), Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerId(),
orderConsignorDO.getCustomerContactsId(), Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerContactsId(), orderItemDOList, isResetPrice ? 20 : 8);
// TODO 此处是否需要更新操作日志
}
// }
......@@ -1962,8 +1974,8 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
}
}
CustomerContactsDO consigneeContactsDO = customerContactsService.getCustomerContacts(orderConsigneeDO.getCustomerContactsId());
if (Objects.isNull(consigneeContactsDO)) {
CustomerContactsDO consigneeContactsDO = customerContactsService.getCustomerContacts(Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerContactsId());
if (Objects.isNull(consigneeContactsDO) && Objects.nonNull(orderConsigneeDO)) {
CustomerContactsDO newConsigneeContactsDO = customerContactsService.getUniqueOneAndValidate(orderConsigneeDO.getCountryCode(), orderConsigneeDO.getPhone(), null);
if (Objects.nonNull(newConsigneeContactsDO)) {
consigneeDO = customerService.getCustomer(newConsigneeContactsDO.getCustomerId());
......@@ -1988,7 +2000,7 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
log.error(msg);
}
} else {
if (!StringUtils.equals(consigneeContactsDO.getPhoneNew(), orderConsigneeDO.getPhone())) {
if (Objects.nonNull(orderConsigneeDO) && !StringUtils.equals(consigneeContactsDO.getPhoneNew(), orderConsigneeDO.getPhone())) {
CustomerContactsDO newConsigneeContactsDO = customerContactsService.getUniqueOneAndValidate(orderConsigneeDO.getCountryCode(), orderConsigneeDO.getPhone(), null);
if (Objects.nonNull(newConsigneeContactsDO)) {
consigneeDO = customerService.getCustomer(newConsigneeContactsDO.getCustomerId());
......@@ -2013,10 +2025,10 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
log.error(msg);
}
} else {
if (!Objects.equals(consigneeContactsDO.getCustomerId(), orderConsigneeDO.getCustomerId())) {
if (Objects.isNull(orderConsigneeDO) || !Objects.equals(consigneeContactsDO.getCustomerId(), orderConsigneeDO.getCustomerId())) {
consigneeDO = customerService.getCustomer(consigneeContactsDO.getCustomerId());
log.info("订单【{}】,更新收货人客户id-[{}]->[{}]",
orderDO.getOrderNo(), orderConsigneeDO.getCustomerId(), consigneeContactsDO.getCustomerId());
orderDO.getOrderNo(), Objects.isNull(orderConsigneeDO) ? 0L : orderConsigneeDO.getCustomerId(), consigneeContactsDO.getCustomerId());
if (Objects.nonNull(consigneeDO)) {
orderConsigneeDO.setCompany(consigneeDO.getCompany());
CountryDO consigneeCountryDO = countryService.getById(consigneeDO.getCountry());
......@@ -2072,7 +2084,7 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
if (Objects.isNull(consignorDO)) {//发货人客户
consignorDO = customerService.getCustomer(orderConsignorDO.getCustomerId());
}
if (Objects.isNull(consigneeDO)) {
if (Objects.isNull(consigneeDO) && Objects.nonNull(orderConsigneeDO)) {
consigneeDO = customerService.getCustomer(orderConsigneeDO.getCustomerId());//收货人客户
}
// 原客户经理
......@@ -2092,7 +2104,7 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
} else if (order.getDrawee() == 1 && consignorDO.getDefaultPay()) {// 如果是发货人付款且档案设置默认付运费 --层级4 第一个
order.setCustomerId(orderConsignorDO.getCustomerId());
} else {
order.setCustomerId(orderConsigneeDO.getCustomerId() != null ? orderConsigneeDO.getCustomerId() : 0);
order.setCustomerId(Objects.nonNull(orderConsigneeDO) && orderConsigneeDO.getCustomerId() != null ? orderConsigneeDO.getCustomerId() : 0);
customerType = 2;
}
} else if (order.getDrawee() == 2) {//收货人付款 层级5 第一个
......@@ -2124,13 +2136,13 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
order.setCustomerId(orderConsignorDO.getCustomerId());
} else {
//去掉层级5、6 ,以上不符合的都归收货人
order.setCustomerId(orderConsigneeDO.getCustomerId() != null ? orderConsigneeDO.getCustomerId() : 0);
order.setCustomerId(Objects.nonNull(orderConsigneeDO) && orderConsigneeDO.getCustomerId() != null ? orderConsigneeDO.getCustomerId() : 0);
customerType = 2;
}
}
} else {
//业绩归收货人
order.setCustomerId(orderConsigneeDO.getCustomerId() != null ? orderConsigneeDO.getCustomerId() : 0);
order.setCustomerId(Objects.nonNull(orderConsigneeDO) && orderConsigneeDO.getCustomerId() != null ? orderConsigneeDO.getCustomerId() : 0);
customerType = 2;
}
}
......@@ -2155,7 +2167,7 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
}
CustomerZhongPaoQueryVO customerZhongPaoQueryVO = new CustomerZhongPaoQueryVO();
customerZhongPaoQueryVO.setConsignorId(orderConsignorDO.getCustomerId());
customerZhongPaoQueryVO.setConsigneeId(orderConsigneeDO.getCustomerId());
customerZhongPaoQueryVO.setConsigneeId(Objects.nonNull(orderConsigneeDO) ? orderConsigneeDO.getCustomerId() : 0L);
customerZhongPaoQueryVO.setDepartureId(logisticsInfoDto.getStartCityId());
customerZhongPaoQueryVO.setObjectiveId(logisticsInfoDto.getDestCityId());
customerZhongPaoQueryVO.setStartWarehouseId(logisticsInfoDto.getStartWarehouseId());
......@@ -2279,9 +2291,9 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
OrderConsigneeDO orderConsigneeDO = orderConsigneeService.getOne(new LambdaQueryWrapper<OrderConsigneeDO>().eq(OrderConsigneeDO::getOrderId, orderDO.getOrderId()).orderByDesc(OrderConsigneeDO::getId).last("limit 1"));
this.costCalculation(userId, orderDO,
orderConsignorDO.getCustomerId(),
orderConsigneeDO.getCustomerId(),
Objects.isNull(orderConsigneeDO)? 0L : orderConsigneeDO.getCustomerId(),
orderConsignorDO.getCustomerContactsId(),
orderConsigneeDO.getCustomerContactsId(),
Objects.isNull(orderConsigneeDO)? 0L : orderConsigneeDO.getCustomerContactsId(),
orderItemDOList, 50);
this.addOrderOperateLog(orderDO.getOrderId(),
"有活动更新订单计价", null);
......
......@@ -588,7 +588,13 @@ public class OrderServiceImpl extends AbstractService<OrderMapper, OrderDO> impl
}
OrderConsigneeDO orderConsigneeDO = null;
// 当订单为控货订单,且发货人客户档案未设置控货无收货人,则需要校验收货人信息
if (order.getIsCargoControl() && !noConsignee) {
if (!order.getIsCargoControl() || !noConsignee) {
// 控货订单有收货人则限制修改收货人
if (order.getIsCargoControl()) {
order.setIsLimitUpdateConsignee(Boolean.TRUE);
}else {
order.setIsLimitUpdateConsignee(Boolean.FALSE);
}
orderConsigneeDO = new OrderConsigneeDO();
orderConsigneeDO.setOrderId(order.getOrderId());
orderConsigneeDO.setCreator(creator);
......@@ -668,6 +674,9 @@ public class OrderServiceImpl extends AbstractService<OrderMapper, OrderDO> impl
}
}
orderConsigneeService.save(orderConsigneeDO);
}else {
// 控货订单没有收货人则不限制修改收货人
order.setIsLimitUpdateConsignee(Boolean.FALSE);
}
if (!Objects.equals(createReqVO.getStatus(), OrderStatusEnum.DRAFT.getValue())) {
//customerType 发货人-1 收货人 2
......@@ -795,7 +804,13 @@ public class OrderServiceImpl extends AbstractService<OrderMapper, OrderDO> impl
orderBusinessService.createOrderControlLog(orderCargoControlDO.getOrderId(), 1, "创建控货信息", msg, 0L);
}
OrderConsigneeDO orderConsigneeDO = null;
if (order.getIsCargoControl() && !noConsignee) {
if (!order.getIsCargoControl() || !noConsignee) {
// 控货订单有收货人则限制修改收货人
if (order.getIsCargoControl()) {
order.setIsLimitUpdateConsignee(Boolean.TRUE);
}else {
order.setIsLimitUpdateConsignee(Boolean.FALSE);
}
orderConsigneeDO = new OrderConsigneeDO();
orderConsigneeDO.setOrderId(order.getOrderId());
orderConsigneeDO.setCreator(creator);
......@@ -905,6 +920,9 @@ public class OrderServiceImpl extends AbstractService<OrderMapper, OrderDO> impl
if (StringUtils.isNotBlank(orderConsigneeDO.getPhone())) {
orderConsigneeService.save(orderConsigneeDO);
}
}else {
// 控货订单没有收货人则不限制修改收货人
order.setIsLimitUpdateConsignee(Boolean.FALSE);
}
if (!Objects.equals(createReqVO.getStatus(),
OrderStatusEnum.DRAFT.getValue())) {
......@@ -934,7 +952,7 @@ public class OrderServiceImpl extends AbstractService<OrderMapper, OrderDO> impl
if (Objects.isNull(consignorDO)) {//发货人客户
consignorDO = customerService.getCustomer(orderConsignorDO.getCustomerId());
}
if (Objects.isNull(consigneeDO)) {
if (Objects.isNull(consigneeDO) && Objects.nonNull(orderConsigneeDO)) {
consigneeDO = customerService.getCustomer(orderConsigneeDO.getCustomerId());//收货人客户
}
// 原客户经理
......@@ -3000,7 +3018,13 @@ public class OrderServiceImpl extends AbstractService<OrderMapper, OrderDO> impl
}
OrderConsigneeDO orderConsigneeDO = orderConsigneeService.getOne(new LambdaQueryWrapper<OrderConsigneeDO>().eq(OrderConsigneeDO::getOrderId, updateObj.getOrderId()).orderByDesc(OrderConsigneeDO::getId).last("limit 1"));
if (updateObj.getIsCargoControl() && !noConsignee) {
if (!updateObj.getIsCargoControl() || !noConsignee) {
// 控货订单有收货人则限制修改收货人
if (updateObj.getIsCargoControl()) {
updateObj.setIsLimitUpdateConsignee(Boolean.TRUE);
}else {
updateObj.setIsLimitUpdateConsignee(Boolean.FALSE);
}
if (Objects.isNull(orderConsigneeDO)) {
orderConsigneeDO = new OrderConsigneeDO();
}
......@@ -3072,6 +3096,8 @@ public class OrderServiceImpl extends AbstractService<OrderMapper, OrderDO> impl
orderConsigneeService.removeById(orderConsigneeDO.getId());
orderConsigneeDO = null;
}
// 控货订单没有收货人则不限制修改收货人
updateObj.setIsLimitUpdateConsignee(Boolean.FALSE);
}
if (!Objects.equals(updateReqVO.getStatus(),
OrderStatusEnum.DRAFT.getValue())) {
......@@ -3218,8 +3244,13 @@ public class OrderServiceImpl extends AbstractService<OrderMapper, OrderDO> impl
OrderConsigneeDO orderConsigneeDO = orderConsigneeService.getOne(new LambdaQueryWrapper<OrderConsigneeDO>().eq(OrderConsigneeDO::getOrderId, updateObj.getOrderId()).orderByDesc(OrderConsigneeDO::getId).last("limit 1"));
if (updateObj.getIsCargoControl() && !noConsignee) {
orderConsigneeDO = new OrderConsigneeDO();
if (!updateObj.getIsCargoControl() || !noConsignee) {
// 控货订单有收货人则限制修改收货人
if (updateObj.getIsCargoControl()) {
updateObj.setIsLimitUpdateConsignee(Boolean.TRUE);
}else {
updateObj.setIsLimitUpdateConsignee(Boolean.FALSE);
}
if (Objects.isNull(orderConsigneeDO)) {
orderConsigneeDO = new OrderConsigneeDO();
}
......@@ -3324,6 +3355,8 @@ public class OrderServiceImpl extends AbstractService<OrderMapper, OrderDO> impl
orderConsigneeDO = null;
}
consigneeDO = null;
// 控货订单没有收货人则不限制修改收货人
updateObj.setIsLimitUpdateConsignee(Boolean.FALSE);
}
if (!Objects.equals(updateReqVO.getStatus(),
OrderStatusEnum.DRAFT.getValue())) {
......@@ -5425,10 +5458,15 @@ public class OrderServiceImpl extends AbstractService<OrderMapper, OrderDO> impl
orderConsignorService.updateById(consignorDO);
OrderConsigneeDO consigneeDO = OrderConsigneeConvert.INSTANCE.convert(consigneeVO);
// 控货订单发货人无收货人属性变动,需要清空订单收货人信息
Boolean isLimitUpdateConsignee = Boolean.FALSE;
if (orderBackVO.getIsChargeNoConsignee()){
orderConsigneeService.removeById(consigneeDO.getId());
}else {
orderConsigneeService.updateById(consigneeDO);
if (orderBackVO.getIsCargoControl()){
// 控货订单有收货人则限制修改收货人
isLimitUpdateConsignee = Boolean.TRUE;
}
}
// 始发地目的地更新
OrderDepartureDO departureDO = OrderDepartureConvert.INSTANCE.convert(orderBackVO.getOrderDepartureVO());
......@@ -5440,6 +5478,7 @@ public class OrderServiceImpl extends AbstractService<OrderMapper, OrderDO> impl
if (orderBackVO.getIsException()) {
orderDO.setHandlerChannelAttrException(false);
}
orderDO.setIsLimitUpdateConsignee(isLimitUpdateConsignee);
orderDO.setOrderNo(oldOrder.getOrderNo());
String oldOrderNo = oldOrder.getOrderNo(); // 临时保存旧的订单编号
boolean isDisassociation = false;
......
......@@ -86,7 +86,22 @@ public interface OrderCargoControlService extends IService<OrderCargoControlDO>
*/
List<OrderCargoControlDO> getOrderCargoControlList(OrderCargoControlQueryVO query);
PageResult<OrderBackPageVO> orderPage(OrderQueryVO query, PageVO page);
PageResult<OrderBackPageVO> cargoControlOrderPage(OrderQueryVO query, PageVO page);
/**
* 预警控货订单信息
* 满足条件:1、控货订单
* 2、非海外仓订单
* 3、控货订单放货三次未提货完
* 4、控货订单已过免仓时效,未完成放货
* 以上为查询出的预警控货订单,以便于将订单转海外仓货、收取仓储费用、提醒客户放货等业务操作
*
* @param query
* @param page
* @return
*/
PageResult<OrderBackPageVO> warningCargoControlOrderPage(OrderQueryVO query, PageVO page);
OrderCargoControlBackVO getOrderCargoControlInfo(Long orderId);
......@@ -108,9 +123,10 @@ public interface OrderCargoControlService extends IService<OrderCargoControlDO>
void exportCargoControlOrderExcel(HttpServletResponse response, OrderQueryVO query) throws IOException;
// FileDO makeCargoControlOrderExcelFile(Long userId, Integer userType, OrderQueryVO query) throws Exception;
// FileDO makeCargoControlOrderExcelFile(Long userId, Integer userType, OrderQueryVO query) throws Exception;
FileDO makeCargoControlOrderExcelFile(Long userId, Integer userType, OrderQueryDTO query) throws Exception;
/**
* 判断是否控货人是否设置了控货密码
*
......
......@@ -152,7 +152,7 @@ public class OrderCargoControlServiceImpl extends AbstractService<OrderCargoCont
// 当控货人手机号没有注册web用户,或者用户没有设置控货密码时不能进行控货密码放货
if (isPasswordNull) {
throw exception(CONTROLLER_USER_NOT_SET_CONTROL_PASSWORD);
}else {
} else {
// 参数:未加密密码,编码后的密码
throw exception(USER_PASSWORD_FAILED);
}
......@@ -175,7 +175,7 @@ public class OrderCargoControlServiceImpl extends AbstractService<OrderCargoCont
String msg = String.format("订单控货人信息由姓名%s,电话+%s,转移为姓名%s,电话+%s,校验方式:%s",
orgOrderCargoControlDO.getName() + "/" + orgOrderCargoControlDO.getNameEn(), orgOrderCargoControlDO.getDialCode() + orgOrderCargoControlDO.getPhone(),
orderCargoControl.getName() + "/" + (StringUtils.isNotBlank(orderCargoControl.getNameEn()) ? orderCargoControl.getNameEn() : "空"), orderCargoControl.getDialCode() + orderCargoControl.getPhone(),
isPasswordPick ? "密码校验": "验证码校验");
isPasswordPick ? "密码校验" : "验证码校验");
orderBusinessService.createOrderControlLog(orderCargoControl.getOrderId(), 3, "控货人信息转移", msg, 0L);
// 返回
return orderCargoControl.getId();
......@@ -225,7 +225,18 @@ public class OrderCargoControlServiceImpl extends AbstractService<OrderCargoCont
}
@Override
public PageResult<OrderBackPageVO> orderPage(OrderQueryVO query, PageVO page) {
public PageResult<OrderBackPageVO> cargoControlOrderPage(OrderQueryVO query, PageVO page) {
return orderQueryService.adminCargoControlOrderPage(query, page);
}
@Override
public PageResult<OrderBackPageVO> warningCargoControlOrderPage(OrderQueryVO query, PageVO page) {
/* 满足条件:1、控货订单
* 2、非海外仓订单
* 3、控货订单放货三次未提货完
* 4、控货订单已过免仓时效,未完成放货
*/
query.setWarningOrder(1);
return orderQueryService.adminCargoControlOrderPage(query, page);
}
......
......@@ -131,15 +131,10 @@ public class OrderCargoControlPickServiceImpl extends AbstractService<OrderCargo
if (StringUtils.equals(createReqVO.getConsigneeCountryCode(), "86")) {
throw exception(CONSIGNEE_PHONE_IS_NOT_CHINA);
}
// if (StringUtils.isNotBlank(createReqVO.getConsigneeCountryCode()) && StringUtils.isNotBlank(createReqVO.getConsigneePhone())) {
String mobileCode = createReqVO.getConsigneeCountryCode() +
StrUtil.COLON + createReqVO.getConsigneePhone();
paramValidatorApi.validatorMobile(mobileCode);
// String phone = PhoneUtil.formatPhone(mobileCode);
// if (StringUtils.isNotBlank(phone)) {
// createReqVO.setConsigneePhone(phone);
// }
// }
OrderDO orderDO = orderService.getById(createReqVO.getOrderId());
if (Objects.isNull(orderDO)) {
throw exception(ORDER_NOT_EXISTS);
......@@ -151,7 +146,21 @@ public class OrderCargoControlPickServiceImpl extends AbstractService<OrderCargo
if (createReqVO.getPickNum() > orderDO.getSumNum()) {
throw exception(ORDER_CARGO_CONTROL_NUM_GO_BEYOND);
}
// 如果控货订单限制修改收货人,则需要判断控货收货人限制修改时间是否到期,且当前放货操作的收货人电话是否有变动
if (orderDO.getIsLimitUpdateConsignee() && Objects.isNull(orderDO.getLockConsigneeTime())){
// 当前控货订单限制修改收货人,但是未到仓/卸柜,未查询到限制时间
throw exception(ORDER_CARGO_CONTROL_LIMIT_UPDATE_CONSIGNEE_ERROR);
}
if (orderDO.getIsLimitUpdateConsignee() && Objects.nonNull(orderDO.getLockConsigneeTime()) && orderDO.getLockConsigneeTime().compareTo(new Date()) >= 0){
// 控货收货人限制修改时间未到期,需要判断当前放货操作的收货人电话是否有变动
OrderCargoControlReleaseInfoDto releaseInfoDto = orderCargoControlMapper.getOrderCargoControlReleaseInfo(orderDO.getOrderId());
if (StringUtils.isBlank(releaseInfoDto.getConsigneeCountryCode()) || StringUtils.isBlank(releaseInfoDto.getConsigneePhone())){
throw exception(ORDER_CONSIGNEE_PHONE_INFO_NOT_COMPLETE);
}
if (!StringUtils.equals(releaseInfoDto.getConsigneeCountryCode()+releaseInfoDto.getConsigneePhone(), createReqVO.getConsigneeCountryCode() + createReqVO.getConsigneePhone())){
throw exception(ORDER_CARGO_CONTROL_LIMIT_UPDATE_CONSIGNEE_INFO);
}
}
int pickNum = 0;
int pickQuantity = 0;
BigDecimal pickVolume = BigDecimal.ZERO;
......
......@@ -15,6 +15,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Comparator;
......@@ -326,9 +327,21 @@ public class OrderBackPageVO {
@ApiModelProperty(value = "已装柜时间/到仓时间")
private Date loadTime;
@ApiModelProperty(value = "已卸柜时间/出仓时间")
@ApiModelProperty(value = "已卸柜/已到仓时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private Date unloadTime;
@ApiModelProperty(value = "是否限制修改收货人")
private Boolean isLimitUpdateConsignee;
@ApiModelProperty(value = "放货锁定收货人到期时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private Date lockConsigneeTime;
@ApiModelProperty(value = "放货锁定收货人天数")
private Integer lockConsigneeDay;
/**
* 渠道名称
......
......@@ -88,7 +88,7 @@ public class OrderBaseVO {
@ApiModelProperty(value = "唛头")
@NotBlank(message = "marks.not.null")
@Length(max = 20, message = "marks.length.max")
@Marks(message = "marks.format.incorrect")
// @Marks(message = "marks.format.incorrect")
private String marks;
@ApiModelProperty(value = "产品备案属性:1有牌,2无牌,3中性,4混牌")
......
......@@ -525,6 +525,9 @@ public class OrderQueryVO {
private Boolean isInOpenSea;
@ApiModelProperty(value = "是否预警控货订单: 1 是")
private Integer warningOrder;
public void setStatus(Integer status) {
this.status = status;
this.asStatus = status;
......
......@@ -1863,6 +1863,21 @@
<if test="query.status != null">
AND o.`status` = #{query.status}
</if>
<if test="query.warningOrder != null and query.warningOrder == 1 ">
AND (o.type is null or o.type = '' or NOT FIND_IN_SET(2, o.type))
AND o.`is_cargo_control` = 1
AND o.unload_time is not null
AND ((select IFNULL(sum(p.pick_num), 0) from `ecw_order_cargo_control_pick` p where p.order_id = o.order_id and p.status = 3) &lt; o.`sum_num`
or
DATE_ADD(o.unload_time, INTERVAL (
SELECT
IFNULL(ew_dest.rent_free_days, 0)
FROM
ecw_warehouse_line ewl
JOIN ecw_warehouse ew_dest ON ewl.dest_warehouse_id = ew_dest.id
WHERE ewl.id = o.line_id
) DAY) &lt; now())
</if>
<if test="query.abnormalState != null">
<choose>
<when test="query.abnormalState != 0">
......@@ -3029,6 +3044,9 @@
o.is_exception,
o.create_time,
o.load_time,
o.unload_time,
o.is_limit_update_consignee,
o.lock_consignee_time,
(select su.nickname from system_user su where su.deleted = 0 and su.id = o.salesman_id) as salesman_name,
(select min(wi.`in_time`) from ecw_order_warehouse_in wi where wi.deleted = 0 and wi.order_id = o.order_id ) as
in_time,
......@@ -3118,6 +3136,9 @@
o.is_exception,
o.create_time,
o.load_time,
o.unload_time,
o.is_limit_update_consignee,
o.lock_consignee_time,
(select su.nickname from system_user su where su.deleted = 0 and su.id = o.salesman_id) as salesman_name,
(select min(wi.`in_time`) from ecw_order_warehouse_in wi where wi.deleted = 0 and wi.order_id = o.order_id ) as
in_time,
......
......@@ -94,7 +94,15 @@ public class OrderCargoControlController {
public CommonResult<PageResult<OrderBackPageVO>> cargoControlOrderPage(OrderQueryVO query, PageVO page) {
query.setUserType(UserTypeEnum.ADMIN.getValue());
PageResult<OrderBackPageVO> pageResult =
orderCargoControlService.orderPage(query, page);
orderCargoControlService.cargoControlOrderPage(query, page);
return success(pageResult);
}
@GetMapping("/warning/cargo/control/order")
@ApiOperation("获得预警控货订单列表查询订单分页")
public CommonResult<PageResult<OrderBackPageVO>> warningCargoControlOrderPage(OrderQueryVO query, PageVO page) {
query.setUserType(UserTypeEnum.ADMIN.getValue());
PageResult<OrderBackPageVO> pageResult =
orderCargoControlService.warningCargoControlOrderPage(query, page);
return success(pageResult);
}
......
......@@ -3371,7 +3371,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
.collect(toList());
if (CollectionUtil.isNotEmpty(stepSpecialList)) {
Map<String, ProductPriceStepSpecialDO> stepSpecialMap = stepSpecialList.stream()
.collect(Collectors.toMap(ProductPriceStepSpecialDO::getSpecialDictType, v -> v));
.collect(Collectors.toMap(ProductPriceStepSpecialDO::getSpecialDictType, v -> v, (v1, v2) -> v2));
List<ProductPriceStepSpecialDO> dbStepSpecialList = stepSpecialGroupMap.get(dbStep.getId());
if (CollectionUtil.isEmpty(dbStepSpecialList)) continue;
for (ProductPriceStepSpecialDO dbStepSpecial : dbStepSpecialList) {
......@@ -3555,7 +3555,7 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
snapshotList.add(snapshot);
dbItem.setUpdater(String.valueOf(loginUserId));
updateColumn(dbItem, productPrice);
productPriceMapper.updateById(dbItem);
} else {
dbItem = ObjectUtil.clone(productPrice);
dbItem.setProductId(productDO.getId());
......@@ -3589,12 +3589,18 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
dbItem.setBlacklist(0);
dbItem.setStatus(0);
dbItem.setCreateTime(current);
productPriceMapper.insert(dbItem);
dbItem.setId(null);
}
dbItem.setUpdateTime(current);
String transportType = lineTransportTypeMap.get(lineId);
initBasePrice(dbItem, transportType);
if (Objects.isNull(dbItem.getId())){
productPriceMapper.insert(dbItem);
}else {
productPriceMapper.updateById(dbItem);
}
//添加修改日志,需要查询特需和阶梯,所以需要在修改之前执行
batchAddSnapshot(snapshotList);
......
......@@ -8,6 +8,8 @@ import lombok.*;
import java.math.BigDecimal;
import java.util.*;
import io.swagger.annotations.*;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.*;
......@@ -36,7 +38,9 @@ public class OfferBaseVO {
private Long consigneeId;
@ApiModelProperty(value = "唛头")
@Marks(message = "marks.format.incorrect")
@NotBlank(message = "marks.not.null")
@Length(max = 20, message = "marks.length.max")
// @Marks(message = "marks.format.incorrect")
private String marks;
@ApiModelProperty(value = "订单类型(可多选):1 集运服务 2 海外仓")
......
......@@ -269,4 +269,6 @@ order.item.freight.unit.not.null=
order.item.clearance.currency.not.null=
order.item.clearance.unit.not.null=
member.id.is.null=
score.count.error=
\ No newline at end of file
score.count.error=
order.cargo.control.limit.update.consignee.error=
order.cargo.control.limit.update.consignee.info=
......@@ -1006,6 +1006,8 @@ order.item.freight.currency.not.null=The currency unit for the shipping cost of
order.item.freight.unit.not.null=The unit of measurement for shipping fees for order items cannot be empty
order.item.clearance.currency.not.null=Customs clearance fee for order goods, currency unit cannot be empty
order.item.clearance.unit.not.null=The unit of measurement for customs clearance fees for order goods cannot be empty
order.cargo.control.limit.update.consignee.error=The current control order restricts the modification of the consignee, and no restriction time was found
order.cargo.control.limit.update.consignee.info=The recipient restriction modification time for the controlled goods order has not expired, and the recipient information for the order cannot be modified
member.id.is.null=no member ids
score.count.error= score count must > 0
......
......@@ -1031,6 +1031,9 @@ reward.redeem.allow.count.error = \u5DF2\u8D85\u51FA\u4E2A\u4EBA\u5141\u8BB8\u51
reward.node.and.points.list.error = \u521B\u5EFA\u793C\u54C1\u7F51\u70B9\u6216\u6240\u9700\u79EF\u5206\u9519\u8BEF
reward.redeem.recipient.error = \u793C\u54C1\u6536\u8D27\u4EBA\u4FE1\u606F\u4E0D\u5168
redeem.import.no.record = \u8868\u683C\u4E2D\u65E0\u8BB0\u5F55
order.cargo.control.limit.update.consignee.error=\u5f53\u524d\u63a7\u8d27\u8ba2\u5355\u9650\u5236\u4fee\u6539\u6536\u8d27\u4eba\uff0c\u672a\u67e5\u8be2\u5230\u9650\u5236\u65f6\u95f4
order.cargo.control.limit.update.consignee.info=\u63a7\u8d27\u8ba2\u5355\u6536\u8d27\u4eba\u9650\u5236\u4fee\u6539\u65f6\u95f4\u672a\u5230\u671f\uff0c\u4e0d\u80fd\u4fee\u6539\u8ba2\u5355\u6536\u8d27\u4eba\u4fe1\u606f
get.lock.failed = \u670D\u52A1\u7E41\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
reward.redeem.not.exist = \u793C\u54C1\u5151\u6362\u8BB0\u5F55\u4E0D\u5B58\u5728
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment