...
|
...
|
@@ -103,7 +103,7 @@ public class DepositOrderService { |
|
|
|
|
|
GoodsInfo goodsInfo = getGoodsInfo(skup); // 查询购买商品的详细信息
|
|
|
|
|
|
AddressInfo addressInfo = buyerOrderMetaService.getHiddenAddressInfo(req.getUid(), orderCode);
|
|
|
AddressInfo addressInfo = buyerOrderMetaService.getHiddenAddressInfo(req.getUid(), orderCode); // 获取用户的地址
|
|
|
|
|
|
addressInfo.setAddress_id_str(AddressUtil.getEncryptStr(String.valueOf(addressInfo.getAddress_id())));// 加密addressId
|
|
|
|
...
|
...
|
@@ -112,7 +112,7 @@ public class DepositOrderService { |
|
|
|
|
|
setBuyerPrice(orderCode, priceInfo); // 设置入手价
|
|
|
|
|
|
return DepositOrderComputeResp.builder().depositRemainDay(getReplacedContent(DepositOrderComputeResp.DEPOSITREMAINDAY_TIP, depositRemainDay))
|
|
|
return DepositOrderComputeResp.builder().depositRemainDay(getRemainDayDesc(depositRemainDay))
|
|
|
.userAddress(addressInfo).priceInfo(priceInfo).goodsInfo(goodsInfo).build();
|
|
|
}
|
|
|
|
...
|
...
|
@@ -121,9 +121,7 @@ public class DepositOrderService { |
|
|
|
|
|
public OrderSubmitResponse publishDepositOrder(DepositOrderComputeReq req) {
|
|
|
Integer uid = req.getUid();
|
|
|
if (uid == null || uid <= 0){
|
|
|
throw new ServiceException(ServiceError.ORDER_REQUEST_PARM_IS_EMPTY);
|
|
|
}
|
|
|
checkUid(uid);
|
|
|
StorageDeposit storageDeposit = checkStorageDeposit(req,
|
|
|
Lists.newArrayList(StorageDepositStatusEnum.HAS_IN.getCode())); //查看在库状态的库存
|
|
|
|
...
|
...
|
@@ -135,6 +133,8 @@ public class DepositOrderService { |
|
|
DepositOrder depositOrder = DepositOrder.builder().uid(uid).amount(new BigDecimal(priceInfo.getAmount()))
|
|
|
.contractFee(new BigDecimal(priceInfo.getContractFee()))
|
|
|
.shipFee(new BigDecimal(priceInfo.getShipFee()))
|
|
|
.lateFee(BigDecimal.valueOf(0.00))
|
|
|
.renewFee(BigDecimal.valueOf(0.00))
|
|
|
.createTime(now).depositCode(req.getDepositCode())
|
|
|
.eventType(DepositEventTypeEnum.DEPOSIT_RECALL_FEE.getCode()).orderCode(orderCode).payment(0).status(0).updateTime(now).build();
|
|
|
|
...
|
...
|
@@ -256,7 +256,25 @@ public class DepositOrderService { |
|
|
return DepositOrderComputeResp.PriceInfo.builder().contractFee(formatFee(contractFee)).shipFee(formatFee(shipFee)).amount(formatFee(amount)).build();
|
|
|
}
|
|
|
|
|
|
private String getRemainDayDesc(Integer remainDay) {
|
|
|
String content = null;
|
|
|
if (remainDay > 0) {
|
|
|
content = DepositOrderComputeResp.DEPOSITREMAINDAY_TIP;
|
|
|
} else if (isFeedback(remainDay)) { // 24小时反馈时间
|
|
|
content = null;
|
|
|
} else {
|
|
|
content = DepositOrderComputeResp.DEPOSIT_OVERDUE_DAY_TIP;
|
|
|
|
|
|
remainDay += DepositOrderComputeResp.FEEDBACK_DAY; // 逾期的天数 需要排除一下反馈天数
|
|
|
}
|
|
|
|
|
|
return StringUtil.getReplacedContent(content, remainDay);
|
|
|
}
|
|
|
|
|
|
private String getReplacedContent(String content ,Object... params) {
|
|
|
if (StringUtils.isEmpty(content)) {
|
|
|
return null;
|
|
|
}
|
|
|
return StringUtil.getReplacedContent(content, params);
|
|
|
}
|
|
|
|
...
|
...
|
@@ -279,8 +297,6 @@ public class DepositOrderService { |
|
|
ExpressRecord expressInfoByOrderCode = expressInfoService.getExpressInfoByOrderCode(depositDetailBo.getOrderCode(), EnumExpressType.EXPRESS_TYPE_2.getCode());
|
|
|
|
|
|
depositDetailBo.setWaybill_code(Optional.ofNullable(expressInfoByOrderCode).map(ExpressRecord::getWaybillCode).orElse(""));
|
|
|
|
|
|
//depositDetailBo.setOrderCode(null);
|
|
|
}
|
|
|
|
|
|
public static String formatFee(BigDecimal fee){
|
...
|
...
|
@@ -289,4 +305,102 @@ public class DepositOrderService { |
|
|
}
|
|
|
return BigDecimalHelper.formatNumber(fee, BigDecimalHelper.FORMAT_TWOBITAFTERPOINT);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 续约试算
|
|
|
* @param req
|
|
|
* @return
|
|
|
*/
|
|
|
public DepositOrderComputeResp computeRenewPrd(DepositOrderComputeReq req) {
|
|
|
StorageDeposit storageDeposit = checkStorageDeposit(req,
|
|
|
Lists.newArrayList(StorageDepositStatusEnum.HAS_IN.getCode())); // 不存在的时候有异常
|
|
|
|
|
|
int depositRemainDay = depositService.getRemainDay(req.getUid(), req.getDepositCode()); // 还可存放多久 单位天
|
|
|
|
|
|
Integer skup = storageDeposit.getSkup();
|
|
|
Long orderCode = storageDeposit.getOrderCode();
|
|
|
|
|
|
GoodsInfo goodsInfo = getGoodsInfo(skup); // 查询购买商品的详细信息
|
|
|
|
|
|
DepositOrderComputeResp.PriceInfo priceInfo = getRenewFeeInfo(depositRemainDay, storageDeposit); // 获取续约各种费用
|
|
|
|
|
|
setBuyerPrice(orderCode, priceInfo); // 设置入手价
|
|
|
|
|
|
return DepositOrderComputeResp.builder().depositRemainDay(getRemainDayDesc(depositRemainDay))
|
|
|
.priceInfo(priceInfo).goodsInfo(goodsInfo).build();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取续约费用
|
|
|
* @param orderCode
|
|
|
* @param storageDeposit 调用者保证数据记录必须存在
|
|
|
* @return
|
|
|
*/
|
|
|
private DepositOrderComputeResp.PriceInfo getRenewFeeInfo(int depositRemainDay, StorageDeposit storageDeposit) {
|
|
|
DepositFee depositFee = metaConfigService.getDepositFeeMap(); // 查询配置表里面的配置
|
|
|
|
|
|
LOG.info("metaConfigService.getDepositFeeMap is {}, storageDeposit is {}", depositFee, storageDeposit);
|
|
|
|
|
|
BigDecimal lateFee = null; // 滞纳金
|
|
|
if (!isFeedback(depositRemainDay) && depositRemainDay < 0) { // 如果不在反馈时间 且已经逾期,则需要算滞纳金
|
|
|
DepositFee.DepositFeePolicy expired = depositFee.getExpired();
|
|
|
|
|
|
BigDecimal amount = expired.getAmount();
|
|
|
BigDecimal bigDecimal = new BigDecimal((depositRemainDay + DepositOrderComputeResp.FEEDBACK_DAY) * -1.00); // 总计滞纳了几天
|
|
|
lateFee = bigDecimal.divide(BigDecimal.valueOf(expired.getDay())).multiply(expired.getAmount());
|
|
|
}
|
|
|
DepositFee.DepositFeePolicy renew = depositFee.getRenew();
|
|
|
BigDecimal renewFee = renew.getAmount(); // 续约费用一定存在
|
|
|
|
|
|
BigDecimal amount = renewFee.add(null == lateFee ? new BigDecimal(0.00) : lateFee);
|
|
|
return DepositOrderComputeResp.PriceInfo.builder().renewFee(formatFee(renewFee))
|
|
|
.renewDesc(getReplacedContent(DepositOrderComputeResp.DEPOSIT_RENEW_DAY_TIP, renew.getDay()))
|
|
|
.lateFee(formatFee(lateFee)).amount(formatFee(amount)).build();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 创建续约订单成功
|
|
|
* @param req
|
|
|
* @return
|
|
|
*/
|
|
|
public OrderSubmitResponse publishDepositRenewOrder(DepositOrderComputeReq req) {
|
|
|
Integer uid = req.getUid();
|
|
|
checkUid(uid);
|
|
|
StorageDeposit storageDeposit = checkStorageDeposit(req,
|
|
|
Lists.newArrayList(StorageDepositStatusEnum.HAS_IN.getCode())); //查看在库状态的库存
|
|
|
|
|
|
long orderCode = orderCodeGenerator.generate(OrderCodeType.STORAGE_MANAGEMENT); // 获取续约的订单号
|
|
|
|
|
|
int now = (int) (System.currentTimeMillis()/1000);
|
|
|
int depositRemainDay = depositService.getRemainDay(req.getUid(), req.getDepositCode()); // 还可存放多久 单位天
|
|
|
|
|
|
LOG.info("depositService.getRemainDay is {}, storageDeposit is {}", depositRemainDay, storageDeposit);
|
|
|
|
|
|
DepositOrderComputeResp.PriceInfo priceInfo = getRenewFeeInfo(depositRemainDay, storageDeposit); // 获取续约各种费用
|
|
|
|
|
|
DepositOrder depositOrder = DepositOrder.builder().uid(uid).amount(new BigDecimal(priceInfo.getAmount()))
|
|
|
.lateFee(new BigDecimal(priceInfo.getLateFee()))
|
|
|
.renewFee(new BigDecimal(priceInfo.getRenewFee()))
|
|
|
.contractFee(BigDecimal.valueOf(0.00))
|
|
|
.shipFee(BigDecimal.valueOf(0.00))
|
|
|
.createTime(now).depositCode(req.getDepositCode())
|
|
|
.eventType(DepositEventTypeEnum.DEPOSIT_RENEW_FEE.getCode()).orderCode(orderCode).payment(0).status(0).updateTime(now).build();
|
|
|
|
|
|
LOG.info("enter publishDepositOrder begin save depositOrder {} ",depositOrder);
|
|
|
int num = depositOrderMapper.insert(depositOrder); // 生成订单数据,insert db
|
|
|
LOG.info("enter publishDepositOrder end save depositOrder {} ,num {}",depositOrder, num);
|
|
|
|
|
|
return OrderSubmitResponse.builder().orderCode(orderCode).paymentStatus(OrderConstant.N_STR).build();
|
|
|
}
|
|
|
|
|
|
private void checkUid(Integer uid) {
|
|
|
if (uid == null || uid <= 0){
|
|
|
throw new ServiceException(ServiceError.ORDER_REQUEST_PARM_IS_EMPTY);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 是否 24小时反馈时间 如果是则返回true
|
|
|
private boolean isFeedback(int depositRemainDay) {
|
|
|
return -1 * DepositOrderComputeResp.FEEDBACK_DAY <= depositRemainDay && depositRemainDay <= 0;
|
|
|
}
|
|
|
} |
...
|
...
|
|