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

This commit is contained in:
张松
2024-12-11 17:25:26 +08:00
5 changed files with 92 additions and 5 deletions

View File

@@ -4,6 +4,7 @@ import cn.ysk.cashier.mybatis.entity.TbCreditBuyerOrder;
import cn.ysk.cashier.mybatis.entity.TbCreditPaymentRecord;
import com.baomidou.mybatisplus.extension.service.IService;
import java.math.BigDecimal;
import java.util.Map;
/**
@@ -27,11 +28,22 @@ public interface TbCreditBuyerOrderService extends IService<TbCreditBuyerOrder>
boolean save(String creditBuyerId, Long orderId);
/**
* 挂账人退款
* 挂账人退款(整单退款)
* @param creditBuyerId 挂账人id
* @param orderId 订单id
* @return
*/
@Deprecated
boolean refund(String creditBuyerId, Long orderId);
/**
* 挂账人退款(部分退款)
* @param creditBuyerId 挂账人id
* @param orderId 订单id
* @param refundAmount 退款金额
* @return
*/
boolean partRefund(String creditBuyerId, Long orderId, BigDecimal refundAmount);
}

View File

@@ -46,6 +46,8 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl<TbCreditBuyerOrde
@Resource
private TbCreditBuyerMapper tbCreditBuyerMapper;
@Resource
private TbCreditBuyerOrderMapper tbCreditBuyerOrderMapper;
@Resource
private TbCreditPaymentRecordMapper tbCreditPaymentRecordMapper;
@Resource
private MpOrderInfoService mpOrderInfoService;
@@ -240,6 +242,7 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl<TbCreditBuyerOrde
}
@Override
@Deprecated
@Transactional(rollbackFor = Exception.class)
public boolean refund(String creditBuyerId, Long orderId) {
if (StrUtil.isBlank(creditBuyerId)) {
@@ -289,4 +292,58 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl<TbCreditBuyerOrde
}
return false;
}
@Override
public boolean partRefund(String creditBuyerId, Long orderId, BigDecimal refundAmount) {
if (StrUtil.isBlank(creditBuyerId)) {
throw new BadRequestException("挂账人id不能为空");
}
TbCreditBuyer creditBuyer = tbCreditBuyerService.getById(creditBuyerId);
if (creditBuyer == null) {
throw new BadRequestException("挂账人不存在");
}
TbOrderInfo orderInfo = mpOrderInfoService.getById(orderId);
if (orderInfo == null) {
throw new BadRequestException("订单不存在");
}
Map<String, Object> params = new HashMap<>(2);
params.put("creditBuyerId", creditBuyerId);
params.put("orderId", orderId);
CreditBuyerOrderDTO dto = baseMapper.getOne(params);
if (dto == null) {
throw new BadRequestException("挂账订单不存在");
}
// 已还款金额进行红冲
TbCreditPaymentRecord record = new TbCreditPaymentRecord();
record.setCreditBuyerId(creditBuyerId);
record.setOrderId(orderId);
record.setRepaymentAmount(NumberUtil.sub(BigDecimal.ZERO, refundAmount));
record.setPaymentMethod("挂账退款");
record.setPaymentTime(new Date());
record.setRemark(StrUtil.format("挂账订单:{},申请退款¥{}元,已恢复挂账额度。", orderInfo.getOrderNo(), refundAmount));
record.setCreateTime(new Date());
tbCreditPaymentRecordMapper.insert(record);
dto = baseMapper.getOne(params);
BigDecimal sub = NumberUtil.sub(refundAmount, dto.getUnpaidAmount());
if (NumberUtil.isGreater(sub, BigDecimal.ZERO)) {
TbCreditPaymentRecord flow = new TbCreditPaymentRecord();
flow.setCreditBuyerId(creditBuyerId);
flow.setOrderId(orderId);
flow.setRepaymentAmount(NumberUtil.sub(BigDecimal.ZERO, sub));
flow.setPaymentMethod("挂账退款");
flow.setPaymentTime(new Date());
flow.setRemark(StrUtil.format("挂账订单:{},申请退款¥{}元,由于此挂账订单已提前还款,溢出部分¥{}元将转储至账户余额。", orderInfo.getOrderNo(), refundAmount, sub));
flow.setCreateTime(new Date());
tbCreditPaymentRecordMapper.insert(flow);
tbCreditBuyerOrderMapper.update(Wrappers.<TbCreditBuyerOrder>lambdaUpdate()
.eq(TbCreditBuyerOrder::getId, dto.getId())
.set(TbCreditBuyerOrder::getPaidAmount, NumberUtil.sub(dto.getPaidAmount(), sub))
);
// 退回余额
creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), sub));
tbCreditBuyerService.updateById(creditBuyer);
}
return true;
}
}

View File

@@ -17,6 +17,7 @@ package cn.ysk.cashier.pojo.shop;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -299,6 +300,10 @@ public class TbShopInfo implements Serializable {
@ApiModelProperty(value = "台桌预订短信")
private String bookingSms;
@Transient
@TableField(exist = false)
private String registerCode;
public void copy(TbShopInfo source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}

View File

@@ -323,6 +323,18 @@ public class TbShopInfoServiceImpl implements TbShopInfoService {
ValidationUtil.isNull(tbShopInfo.getId(), "TbShopInfo", "id", resources.getId());
tbShopInfo.copy(resources);
tbShopInfo.setUpdatedAt(Instant.now().toEpochMilli());
if (resources.getRegisterCode() != null) {
TbMerchantRegister tbMerchantRegister = merchantRegisterRepository.findByRegisterCode(resources.getRegisterCode());
if (tbMerchantRegister == null) {
throw new BadRequestException("激活码有误");
}
if (tbMerchantRegister.getStatus() == 1) {
throw new BadRequestException("激活码已激活,不能重复绑定");
}
tbShopInfo.setExpireAt(DateUtil.addMonthsAndGetTimestamp(tbMerchantRegister.getPeriodYear()));
//向redis中存入key
redisUtils.set(CacheKey.ACT_CODE + resources.getAccount(), "1", tbShopInfo.getExpireAt() - Instant.now().toEpochMilli());
}
tbShopInfoRepository.save(tbShopInfo);
}

View File

@@ -2891,11 +2891,12 @@ public class TbShopTableServiceImpl implements TbShopTableService {
.eq(TbOrderDetail::getShopId, returnOrderDTO.getShopId())
.eq(TbOrderDetail::getStatus, "closed")
.eq(TbOrderDetail::getOrderId, returnOrderDTO.getOrderId())
.in(TbOrderDetail::getId, detailIds)
.orderByDesc(TbOrderDetail::getUserCouponId));
if (detailList.size() != returnOrderDTO.getOrderDetails().size()) {
/*if (detailList.size() != returnOrderDTO.getOrderDetails().size()) {
throw new BadRequestException("挂账退款必须全退");
}
}*/
} else {
detailList = orderDetailMapper.selectList(new LambdaQueryWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getShopId, returnOrderDTO.getShopId())
@@ -3130,7 +3131,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override
@Transactional
@Transactional(rollbackFor = Exception.class)
public Object returnOrder(ReturnOrderDTO returnOrderDTO) {
TbOrderInfo orderInfo = orderInfoMapper.selectOne(new LambdaQueryWrapper<TbOrderInfo>()
.eq(TbOrderInfo::getId, returnOrderDTO.getOrderId())
@@ -3172,7 +3173,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
mpOrderDetailService.updateStatusByOrderIdAndIds(OrderStatusEnums.REFUNDING, OrderStatusEnums.REFUND,
returnOrderDTO.getOrderId(), returnOrderDTO.getOrderDetails().stream().map(ReturnOrderDTO.OrderDetail::getId).collect(Collectors.toList()));
} else if (TableConstant.OrderInfo.PayType.CREDIT_BUYER.equalsVals(payType)) {
creditBuyerOrderService.refund(orderInfo.getCreditBuyerId(), Long.valueOf(orderInfo.getId()));
creditBuyerOrderService.partRefund(orderInfo.getCreditBuyerId(), Long.valueOf(orderInfo.getId()), returnAmount);
}
orderInfo.setStatus(TableConstant.OrderInfo.Status.CLOSED.getValue());