提交 73798259 作者: zhenjie

购物车相关接口

上级 bf111e73
package com.mmc.oms.dao;
import com.mmc.oms.entity.mall.UserAddressDO;
import com.mmc.oms.entity.uav.UavOrderExpressDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
......@@ -20,4 +21,6 @@ public interface UserAddressDao {
UserAddressDO selectById(Integer userAddressId);
List<UserAddressDO> selectList(UserAddressDO userAddressDO);
void batchAddOrderExpress(List<UavOrderExpressDO> expressDOS);
}
......@@ -49,4 +49,6 @@ public interface UavOrderDao {
void updateUavOrderProportion(Integer id, Integer proportion);
void closeShowUavOrder(Integer id);
void batchAddOrder(List<UavOrderDO> orders);
}
......@@ -22,8 +22,16 @@ public class UavCartCompanyDTO implements Serializable {
private static final long serialVersionUID = -6785504068213761405L;
@ApiModelProperty(value = "商家id")
private Integer thirdBackUserAccountId;
@ApiModelProperty(value = "商家名称")
private String companyName;
@ApiModelProperty("是否抵扣云享金,0否,1是")
private Integer deductShareAmount;
@ApiModelProperty("是否抵扣余额,0否,1是")
private Integer deductSalaryAmount;
@ApiModelProperty(value = "购物车对应规格")
private List<UavCartDTO> uavCartDOS;
}
......@@ -48,6 +48,8 @@ public class UavCartDTO implements Serializable {
private Date createTime;
@ApiModelProperty(value = "是否展示价格,0 不显示 1显示")
private Integer priceShow;
@ApiModelProperty(value = "是否删除")
private Integer deleted;
@ApiModelProperty(value = "是否上架状态:0: 下架 1:上架")
private Integer shelfStatus;
}
......@@ -27,12 +27,6 @@ public class AddUavOrderByCartQO implements Serializable {
@ApiModelProperty("用户备注")
private String userRemark;
@ApiModelProperty("是否抵扣云享金,0否,1是")
private Integer deductShareAmount;
@ApiModelProperty("是否抵扣余额,0否,1是")
private Integer deductSalaryAmount;
@ApiModelProperty("每家商户对应的规格")
private List<UavCartCompanyDTO> cartCompanyDTOS;
}
package com.mmc.oms.service.uav.impl;
import com.alibaba.fastjson2.JSONObject;
import com.mmc.oms.common.ResultEnum;
import com.mmc.oms.common.result.PageResult;
import com.mmc.oms.common.result.ResultBody;
......@@ -15,6 +16,7 @@ import com.mmc.oms.model.qo.uav.PriceStockQO;
import com.mmc.oms.model.qo.uav.UavCartQO;
import com.mmc.oms.model.vo.uav.UavCartVO;
import com.mmc.oms.service.uav.UavCartService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -28,6 +30,7 @@ import java.util.stream.Collectors;
* @Date: 2023/9/16 14:40
*/
@Service
@Slf4j
public class UavCartServiceImpl implements UavCartService {
@Autowired
private UavCartDao uavCartDao;
......@@ -71,14 +74,15 @@ public class UavCartServiceImpl implements UavCartService {
if (list.size() == 0) {
return ResultBody.success(PageResult.buildPage(uavCartQO.getPageNo(), uavCartQO.getPageSize(), list.size()));
}
Integer pageNo = uavCartQO.getPageNo();
Integer pageNo = uavCartQO.getPageSize();
uavCartQO.buildCurrentPage();
List<UavCartCompanyDO> uavCartCompanyDOS = uavCartDao.list(pageNo, uavCartQO.getPageSize(), currentAccount.getUserAccountId());
List<UavCartCompanyDO> uavCartCompanyDOS = uavCartDao.list(uavCartQO.getPageNo(), uavCartQO.getPageSize(), currentAccount.getUserAccountId());
List<UavCartCompanyDTO> uavCartCompanyDTOS = uavCartCompanyDOS.stream().map(UavCartCompanyDO::buildUavCartCompanyDTO).collect(Collectors.toList());
// 同步商品信息,价格及是否展示
// 根据规格查询商品信息
buildUavCartCompany(uavCartQO.getOrderType(), uavCartCompanyDTOS);
return ResultBody.success(PageResult.buildPage(pageNo, uavCartQO.getPageSize(), list.size(), uavCartCompanyDTOS));
List<UavCartCompanyDTO> collect = uavCartCompanyDTOS.stream().filter(i -> CollectionUtils.isNotEmpty(i.getUavCartDOS())).collect(Collectors.toList());
return ResultBody.success(PageResult.buildPage(pageNo, uavCartQO.getPageSize(), list.size(), collect));
}
@Override
......@@ -99,28 +103,31 @@ public class UavCartServiceImpl implements UavCartService {
for (UavCartCompanyDTO uavCartCompanyDTO : uavCartCompanyDTOS) {
uavCartCompanyDTO.setCompanyName(uavCartCompanyDTO.getUavCartDOS().get(0).getCompanyName());
for (UavCartDTO uavCartDTO : uavCartCompanyDTO.getUavCartDOS()) {
// 从最新规格中逐个更新
// 标识是否找到
Boolean flag = false;
// 从最新规格中逐个更新,没有则置为失效
for (UavCartDTO newestUavCartDTO : uavCartDTOS) {
if (uavCartDTO.getMallGoodsId().equals(newestUavCartDTO.getMallGoodsId())
&& uavCartDTO.getProductSpec().equals(newestUavCartDTO.getProductSpec())) {
// 不符合的移除
if (UavOrderType.PAY.getCode().equals(orderType)) {
if (newestUavCartDTO.getPriceShow().equals(0)) {
uavCartCompanyDTO.getUavCartDOS().remove(uavCartDTO);
}
}else {
if (newestUavCartDTO.getPriceShow().equals(1)) {
uavCartCompanyDTO.getUavCartDOS().remove(uavCartDTO);
}
}
flag = true;
uavCartDTO.setPriceShow(newestUavCartDTO.getPriceShow());
uavCartDTO.setSalePrice(newestUavCartDTO.getSalePrice());
uavCartDTO.setShelfStatus(newestUavCartDTO.getShelfStatus());
uavCartDTO.setDeleted(newestUavCartDTO.getDeleted());
break;
}
}
// 找不到或被删除则置为失效
if (!flag || uavCartDTO.getDeleted().equals(1)) {
uavCartDTO.setShelfStatus(0);
}
}
if (CollectionUtils.isEmpty(uavCartCompanyDTO.getUavCartDOS())) {
uavCartCompanyDTOS.remove(uavCartCompanyDTO);
for (UavCartCompanyDTO cartCompanyDTO : uavCartCompanyDTOS) {
if (UavOrderType.PAY.getCode().equals(orderType)) {
cartCompanyDTO.setUavCartDOS(cartCompanyDTO.getUavCartDOS().stream().filter( item -> item.getPriceShow().equals(1)).collect(Collectors.toList()));
}else {
cartCompanyDTO.setUavCartDOS(cartCompanyDTO.getUavCartDOS().stream().filter( item -> item.getPriceShow().equals(0)).collect(Collectors.toList()));
}
}
}
}
......
......@@ -163,17 +163,8 @@ public class UavOrderServiceImpl implements UavOrderService {
statusCode = UavOrderStatus.WAITING_DELIVER_GOODS.getCode();
}
}
PayUavWalletVO payUavWalletVO = new PayUavWalletVO();
payUavWalletVO.setCashAmount(shareAmount);
payUavWalletVO.setSalaryAmount(salaryAmount);
payUavWalletVO.setOrderStatus(100);
payUavWalletVO.setUserAccountId(currentAccount.getUserAccountId());
if (shareAmount.compareTo(BigDecimal.ZERO) > 0 || salaryAmount.compareTo(BigDecimal.ZERO) > 0) {
ResultBody resultBody = userAppApi.feignPayUavWallet(payUavWalletVO, currentAccount.getToken());
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())){
return resultBody;
}
}
// 抵扣余额
this.deductWallet(shareAmount, salaryAmount, currentAccount);
}
// 添加总订单表
UavOrderDO uavOrderDO = new UavOrderDO();
......@@ -664,29 +655,86 @@ public class UavOrderServiceImpl implements UavOrderService {
@Override
public ResultBody addOrderByCart(AddUavOrderByCartQO orderByCartQO, BaseAccountDTO currentAccount) {
uavCartService.buildUavCartCompany(orderByCartQO.getOrderType(), orderByCartQO.getCartCompanyDTOS());
// 可以多商家多商品,为每个商家生成一个订单
List<UavOrderDO> orders = new ArrayList<UavOrderDO>();
BigDecimal allAmount = BigDecimal.ZERO;
// 意向订单只能下一个商家的
if (orderByCartQO.getOrderType().equals(UavOrderType.SIGN.getCode()) && orderByCartQO.getCartCompanyDTOS().size() > 1) {
return ResultBody.error("意向订单仅限下单个商家的商品");
}
// 正常订单可以抵扣云享金和余额、意向订单不能扣
if (orderByCartQO.getOrderType().equals(UavOrderType.PAY.getCode())){
}else {
}
// 购物车id
List<Integer> cartIds = new ArrayList<>();
// 云享金、余额扣除相关
ResultBody<PayWalletDTO> payResInfo = userAppApi.getCurrentUserPayWalletInfo(currentAccount.getToken());
if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payResInfo.getResult() == null){
return payResInfo;
}
PayWalletDTO payWalletDTO = payResInfo.getResult();
// 可以多商家多商品,为每个商家生成一个订单
List<UavOrderDO> orders = new ArrayList<UavOrderDO>();
BigDecimal allOtherAmount = BigDecimal.ZERO;
BigDecimal allShareAmount = BigDecimal.ZERO;
BigDecimal allSalaryAmount = BigDecimal.ZERO;
// 生成订单信息
for (UavCartCompanyDTO companyDTO : orderByCartQO.getCartCompanyDTOS()) {
BigDecimal singleOrderAmount = BigDecimal.ZERO;
BigDecimal orderAmount = BigDecimal.ZERO;
UavOrderDO uavOrderDO = new UavOrderDO();
// 校验云享金、钱包余额是否足够抵扣
BigDecimal shareAmount = BigDecimal.ZERO;
BigDecimal salaryAmount = BigDecimal.ZERO;
BigDecimal otherAmount = BigDecimal.ZERO;
Integer statusCode = null;
List<UavOrderSkuDO> skuDOS = new ArrayList<UavOrderSkuDO>();
String orderNo = CodeUtil.uavOrderCode();
if (CollectionUtils.isNotEmpty(companyDTO.getUavCartDOS())) {
for (UavCartDTO uavCartDTO : companyDTO.getUavCartDOS()) {
// 记录购物车id
cartIds.add(uavCartDTO.getId());
// 购物车记录转换成对应规格
UavOrderSkuDO uavOrderSkuDO = new UavOrderSkuDO(uavCartDTO);
skuDOS.add(uavOrderSkuDO);
singleOrderAmount = singleOrderAmount.add(uavCartDTO.getSalePrice().multiply(BigDecimal.valueOf(uavCartDTO.getOrderNum())));
orderAmount = orderAmount.add(uavCartDTO.getSalePrice().multiply(BigDecimal.valueOf(uavCartDTO.getOrderNum())));
}
}
otherAmount = otherAmount.add(orderAmount);
// 抵扣云享金
if (companyDTO.getDeductShareAmount().equals(1) && payWalletDTO.getCashAmt().compareTo(BigDecimal.ZERO) > 0) {
if (payWalletDTO.getCashAmt().compareTo(otherAmount) > 0) {
shareAmount = shareAmount.add(otherAmount);
}else {
shareAmount = shareAmount.add(payWalletDTO.getCashAmt());
}
otherAmount = otherAmount.subtract(shareAmount);
allShareAmount = allShareAmount.add(shareAmount);
payWalletDTO.setCashAmt(payWalletDTO.getCashAmt().subtract(shareAmount));
}
// 抵扣余额
if (companyDTO.getDeductSalaryAmount().equals(1) && payWalletDTO.getSalaryAmt().compareTo(BigDecimal.ZERO) > 0
&& otherAmount.compareTo(BigDecimal.ZERO) > 0) {
if (otherAmount.compareTo(payWalletDTO.getSalaryAmt()) > 0) {
salaryAmount = salaryAmount.add(payWalletDTO.getSalaryAmt());
}else {
salaryAmount = salaryAmount.add(otherAmount);
}
otherAmount = otherAmount.subtract(salaryAmount);
allSalaryAmount = allSalaryAmount.add(salaryAmount);
payWalletDTO.setSalaryAmt(payWalletDTO.getSalaryAmt().subtract(salaryAmount));
}
if (otherAmount.compareTo(BigDecimal.ZERO) == 0) {
statusCode = UavOrderStatus.WAITING_DELIVER_GOODS.getCode();
}else {
statusCode = UavOrderStatus.PAYING.getCode();
}
// 设置订单状态
// uavOrderDO.setStatusCode();
uavOrderDO.setOrderTotalAmount(singleOrderAmount);
uavOrderDO.setStatusCode(statusCode);
uavOrderDO.setOrderTotalAmount(orderAmount);
uavOrderDO.setOtherAmount(otherAmount);
uavOrderDO.setSalaryAmount(salaryAmount);
uavOrderDO.setShareAmount(shareAmount);
uavOrderDO.setUserAccountId(currentAccount.getUserAccountId());
uavOrderDO.setUserAddressId(orderByCartQO.getUserAddressId());
uavOrderDO.setThirdBackUserAccountId(companyDTO.getThirdBackUserAccountId());
......@@ -696,15 +744,49 @@ public class UavOrderServiceImpl implements UavOrderService {
uavOrderDO.setOrderNo(orderNo);
uavOrderDO.setSkuDOS(skuDOS);
orders.add(uavOrderDO);
allAmount = allAmount.add(singleOrderAmount);
allOtherAmount = allOtherAmount.add(otherAmount);
}
// 抵扣余额
this.deductWallet(allShareAmount, allSalaryAmount, currentAccount);
// 添加订单信息
uavOrderDao.batchAddOrder(orders);
// 全部规格信息
List<UavOrderSkuDO> allSkuDOS = new ArrayList<UavOrderSkuDO>();
for (UavOrderDO order : orders) {
for (UavOrderSkuDO skuDO : order.getSkuDOS()) {
skuDO.setUavOrderId(order.getId());
allSkuDOS.add(skuDO);
}
}
// 云享金、余额扣除相关
ResultBody<PayWalletDTO> payResInfo = userAppApi.getCurrentUserPayWalletInfo(currentAccount.getToken());
if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payResInfo.getResult() == null){
return payResInfo;
// 批量添加规格
uavOrderDao.addOrderSku(allSkuDOS);
// 多个添加收货地址
List<UavOrderExpressDO> expressDOS = new ArrayList<UavOrderExpressDO>();
UserAddressDO userAddressDO = userAddressDao.selectById(orderByCartQO.getUserAddressId());
for (UavOrderDO order : orders) {
UavOrderExpressDO uavOrderExpressDO = new UavOrderExpressDO(userAddressDO);
uavOrderExpressDO.setUavOrderId(order.getId());
expressDOS.add(uavOrderExpressDO);
}
// 批量添加收货地址
userAddressDao.batchAddOrderExpress(expressDOS);
// 批量标识购物车
uavCartService.batchRemove(cartIds);
return ResultBody.success();
}
public ResultBody deductWallet(BigDecimal allShareAmount, BigDecimal allSalaryAmount, BaseAccountDTO currentAccount){
PayUavWalletVO payUavWalletVO = new PayUavWalletVO();
payUavWalletVO.setCashAmount(allShareAmount);
payUavWalletVO.setSalaryAmount(allSalaryAmount);
payUavWalletVO.setOrderStatus(100);
payUavWalletVO.setUserAccountId(currentAccount.getUserAccountId());
if (allShareAmount.compareTo(BigDecimal.ZERO) > 0 || allSalaryAmount.compareTo(BigDecimal.ZERO) > 0) {
ResultBody resultBody = userAppApi.feignPayUavWallet(payUavWalletVO, currentAccount.getToken());
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())){
throw new RuntimeException("余额抵扣失败!");
}
}
PayWalletDTO payWalletDTO = payResInfo.getResult();
return ResultBody.success();
}
}
......@@ -26,6 +26,14 @@
values (#{userAccountId}, #{takeName}, #{takePhone}, #{takeRegion}, #{takeAddress},#{type},#{flag},#{districtCode})
</insert>
<insert id="batchAddOrderExpress">
insert into user_address(user_account_id, take_name, take_phone, take_region, take_address,`type`,flag,district_code)
values
<foreach item="item" collection="list" separator=",">
(#{item.userAccountId}, #{item.takeName}, #{item.takePhone}, #{item.takeRegion}, #{item.takeAddress},#{item.type},#{item.flag},#{item.districtCode})
</foreach>
</insert>
<!-- 通过主键修改数据 -->
<update id="update" parameterType="com.mmc.oms.entity.mall.UserAddressDO">
update user_address
......
......@@ -86,6 +86,17 @@
values (#{mallGoodsId}, #{uavOrderId}, #{remarkLevel}, #{uavImages}, #{content}, NOW())
</insert>
<insert id="batchAddOrder" keyProperty="id" useGeneratedKeys="true">
insert into uav_order(order_no, status_code, user_account_id, third_back_user_account_id, company_name, order_total_amount,
salary_amount, share_amount, other_amount, pay_type, order_type, user_address_id, user_remark, seller_remark, create_time
)
values
<foreach item="item" collection="list" separator=",">
(#{item.orderNo}, #{item.statusCode}, #{item.userAccountId}, #{item.thirdBackUserAccountId}, #{item.companyName}, #{item.orderTotalAmount},
#{item.salaryAmount}, #{item.shareAmount}, #{item.otherAmount}, #{item.payType}, #{item.orderType}, #{item.userAddressId}, #{item.userRemark}, #{item.sellerRemark}, NOW())
</foreach>
</insert>
<update id="sellerRemark">
update uav_order set seller_remark = #{content} where id = #{id}
</update>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论