提交 c693b50a 作者: zhenjie

购物车多商家商品下单

上级 bcc350db
......@@ -236,6 +236,14 @@ public class CodeUtil {
return sb.toString();
}
public static String multiUavOrderPayCode() {
StringBuffer sb = new StringBuffer();
sb.append("m");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmmss"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 活动编号
*/
......
......@@ -2,6 +2,7 @@ package com.mmc.oms.controller.uav;
import com.mmc.oms.common.result.ResultBody;
import com.mmc.oms.controller.BaseController;
import com.mmc.oms.feign.UserAppApi;
import com.mmc.oms.model.dto.uav.UavCartCompanyDTO;
import com.mmc.oms.model.dto.uav.UavCartDTO;
import com.mmc.oms.model.dto.uav.UavOrderDTO;
......@@ -13,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;
/**
......
......@@ -3,6 +3,7 @@ package com.mmc.oms.controller.uav;
import com.mmc.oms.common.result.ResultBody;
import com.mmc.oms.controller.BaseController;
import com.mmc.oms.model.dto.ContractInfoDTO;
import com.mmc.oms.model.dto.uav.MultiUavOrderDTO;
import com.mmc.oms.model.dto.uav.UavCartCompanyDTO;
import com.mmc.oms.model.dto.uav.UavOrderDTO;
import com.mmc.oms.model.dto.uav.UavOrderStatusDTO;
......@@ -38,10 +39,10 @@ public class UavOrderController extends BaseController {
}
@ApiOperation(value = "提交订单-购物车")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = UavOrderDTO.class)})
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = MultiUavOrderDTO.class)})
@PostMapping("addOrderByCart")
public ResultBody<UavOrderDTO> addOrderByCart(@RequestBody AddUavOrderByCartQO orderByCartQO,
HttpServletRequest request) {
public ResultBody<MultiUavOrderDTO> addOrderByCart(@RequestBody AddUavOrderByCartQO orderByCartQO,
HttpServletRequest request) {
return uavOrderService.addOrderByCart(orderByCartQO, this.getCurrentAccount(request));
}
......
package com.mmc.oms.dao.uav;
import com.mmc.oms.entity.uav.UavPayWxDO;
import com.mmc.oms.entity.uav.UavPayWxSubDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author: zj
* @Date: 2023/9/21 19:36
*/
@Mapper
public interface UavPayWxDao {
UavPayWxDO getUavPayWx(String payNo);
void addUavPayWx(UavPayWxDO uavPayWx);
void batchAddUavPayWxSub(List<UavPayWxSubDO> payWxSubDOS);
List<UavPayWxSubDO> listUavPayWxSub(Integer uavPayWxId);
}
package com.mmc.oms.entity.uav;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @author: zj
* @Date: 2023/9/21 16:59
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("多订单支付总记录")
public class UavPayWxDO implements Serializable {
private static final long serialVersionUID = 3003931182943391633L;
private Integer id;
private String payNo;
private BigDecimal amount;
private String tradeState;
private Date createTime;
private List<UavPayWxSubDO> payWxSubDOS;
}
package com.mmc.oms.entity.uav;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/9/21 19:27
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("订单微信支付记录")
public class UavPayWxSubDO implements Serializable {
private static final long serialVersionUID = -1446318972494082705L;
private Integer id;
private Integer uavPayWxId;
private Integer uavOrderId;
private BigDecimal amount;
private Date createTime;
}
......@@ -38,6 +38,9 @@ public interface UserAppApi {
@GetMapping("company/getManagerIdByBackUserId")
public ResultBody getManagerIdByBackUserId(@RequestParam Integer backUserAccountId, @RequestHeader String token);
@PostMapping("user-account/feignListUserAccountByIds")
List<UserAccountSimpleDTO> feignListUserAccountByIds(@RequestBody List<Integer> ids, @RequestHeader("token") String token);
/**
* 获取小程序用户集合列表页面
*
......
......@@ -52,6 +52,12 @@ public class UserAppApiHystrix implements UserAppApi {
}
@Override
public List<UserAccountSimpleDTO> feignListUserAccountByIds(List<Integer> ids, String token) {
log.error("熔断:UserAppApiHystrix.feignListUserAccountByIds:{}", ids);
return null;
}
@Override
public List<UserAccountSimpleDTO> feignListAppUserAccount(UserAccountQO userAccountQO, String token) {
log.error("熔断:UserAppApiHystrix.feignListAppUserAccount:{}", userAccountQO);
return null;
......
package com.mmc.oms.model.dto.uav;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* @author: zj
* @Date: 2023/9/21 16:11
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MultiUavOrderDTO implements Serializable {
private static final long serialVersionUID = -935420087357754202L;
private BigDecimal allOtherAmount;
private String payNo;
private List<UavOrderDTO> uavOrderDTOS;
}
......@@ -24,9 +24,9 @@ public class UavCartDTO implements Serializable {
private Integer id;
@ApiModelProperty(value = "用户ID")
private Integer userAccountId;
@ApiModelProperty(value = "商家id")
@ApiModelProperty(value = "商家id", hidden = true)
private Integer thirdBackUserAccountId;
@ApiModelProperty(value = "商家名称")
@ApiModelProperty(value = "商家名称", hidden = true)
private String companyName;
@ApiModelProperty(value = "商品id")
private Integer mallGoodsId;
......
......@@ -19,8 +19,6 @@ import java.io.Serializable;
@AllArgsConstructor
public class UavCartQO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "订单类型,0正常订单,1意向订单", required = true)
private Integer orderType;
@ApiModelProperty(value = "页码", required = true)
@NotNull(message = "页码不能为空", groups = Page.class)
......
......@@ -11,12 +11,14 @@ import com.mmc.oms.dao.demand.DemandReleaseOrderDao;
import com.mmc.oms.dao.demand.PublishServiceOrderDao;
import com.mmc.oms.dao.topup.TopUpOrderDao;
import com.mmc.oms.dao.uav.UavOrderDao;
import com.mmc.oms.dao.uav.UavPayWxDao;
import com.mmc.oms.entity.demand.DemandReleaseOrderDO;
import com.mmc.oms.entity.demand.GetOrderNumberDO;
import com.mmc.oms.entity.demand.GetOrderNumberDTO;
import com.mmc.oms.entity.demand.ServiceRequirementsDO;
import com.mmc.oms.entity.topup.TopUpOrderDO;
import com.mmc.oms.entity.uav.UavOrderDO;
import com.mmc.oms.entity.uav.UavPayWxDO;
import com.mmc.oms.enums.UavOrderStatus;
import com.mmc.oms.feign.UserAppApi;
import com.mmc.oms.model.dto.uav.PayWalletDTO;
......@@ -81,6 +83,9 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
private TopUpOrderDao topUpOrderDao;
@Autowired
private UavPayWxDao uavPayWxDao;
@Autowired
private UserAppApi userAppApi;
@Override
......@@ -109,17 +114,25 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
}
}
public ResultBody payUavOrder(CommonPaymentVO commonPaymentVO, String token) {
UavOrderDO uavOrderDO = uavOrderDao.detailByNo(commonPaymentVO.getOrderNumber());
if (uavOrderDO.getOtherAmount().multiply(BigDecimal.valueOf(100)).compareTo(BigDecimal.valueOf(commonPaymentVO.getAmount())) !=0 ){
private ResultBody multiUavOrderPay(OrderRequestParamsVO orderRequestParamsVO, String token) {
UavPayWxDO uavPayWxDO = uavPayWxDao.getUavPayWx(orderRequestParamsVO.getOrderNo());
if (uavPayWxDO.getAmount().multiply(BigDecimal.valueOf(100)).compareTo(BigDecimal.valueOf(orderRequestParamsVO.getAmount())) !=0 ){
return ResultBody.error("发起支付金额不正确");
}
orderRequestParamsVO.setDescription("商城多订单" + orderRequestParamsVO.getOrderNo());
ResultBody resultBody = releaseOrder(orderRequestParamsVO, token);
if (!"200".equals(resultBody.getCode())) {
throw new RuntimeException("调用微信支付方法失败!");
}
return resultBody;
}
private ResultBody singleUavOrderPay(OrderRequestParamsVO orderRequestParamsVO, String token) {
UavOrderDO uavOrderDO = uavOrderDao.detailByNo(orderRequestParamsVO.getOrderNo());
if (uavOrderDO.getOtherAmount().multiply(BigDecimal.valueOf(100)).compareTo(BigDecimal.valueOf(orderRequestParamsVO.getAmount())) !=0 ){
return ResultBody.error("发起支付金额不正确");
}
OrderRequestParamsVO orderRequestParamsVO = new OrderRequestParamsVO();
orderRequestParamsVO.setOrderNo(commonPaymentVO.getOrderNumber());
orderRequestParamsVO.setAmount(commonPaymentVO.getAmount());
orderRequestParamsVO.setAttach("PAY_UAV_ORDER");
orderRequestParamsVO.setDescription("商城订单" + uavOrderDO.getOrderNo());
orderRequestParamsVO.setOrderPort(commonPaymentVO.getOrderPort());
ResultBody resultBody = releaseOrder(orderRequestParamsVO, token);
if (!"200".equals(resultBody.getCode())) {
throw new RuntimeException("调用微信支付方法失败!");
......@@ -127,6 +140,20 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
return resultBody;
}
public ResultBody payUavOrder(CommonPaymentVO commonPaymentVO, String token) {
OrderRequestParamsVO orderRequestParamsVO = new OrderRequestParamsVO();
orderRequestParamsVO.setOrderNo(commonPaymentVO.getOrderNumber());
orderRequestParamsVO.setAmount(commonPaymentVO.getAmount());
orderRequestParamsVO.setAttach("PAY_UAV_ORDER");
orderRequestParamsVO.setOrderPort(commonPaymentVO.getOrderPort());
// 购物车下单涉及多订单
if (commonPaymentVO.getOrderNumber().startsWith("m")) {
return multiUavOrderPay(orderRequestParamsVO, token);
}else {
return singleUavOrderPay(orderRequestParamsVO, token);
}
}
@Transactional(rollbackFor = Exception.class)
public ResultBody topUpOrder(CommonPaymentVO commonPaymentVO, String token, Integer userAccountId) {
// 生成充值订单编号 规则T加时间戳加用户id加随机数4位
......
......@@ -21,5 +21,5 @@ public interface UavCartService {
ResultBody list(UavCartQO uavCartQO, BaseAccountDTO currentAccount);
void buildUavCartCompany(Integer orderType, List<UavCartCompanyDTO> uavCartCompanyDTOS);
void buildUavCartCompany(List<UavCartCompanyDTO> uavCartCompanyDTOS);
}
......@@ -80,13 +80,13 @@ public class UavCartServiceImpl implements UavCartService {
List<UavCartCompanyDTO> uavCartCompanyDTOS = uavCartCompanyDOS.stream().map(UavCartCompanyDO::buildUavCartCompanyDTO).collect(Collectors.toList());
// 同步商品信息,价格及是否展示
// 根据规格查询商品信息
buildUavCartCompany(uavCartQO.getOrderType(), uavCartCompanyDTOS);
buildUavCartCompany(uavCartCompanyDTOS);
uavCartCompanyDTOS.removeIf(i -> CollectionUtils.isEmpty(i.getUavCartDOS()));
return ResultBody.success(PageResult.buildPage(pageNo, uavCartQO.getPageSize(), list.size(), uavCartCompanyDTOS));
}
@Override
public void buildUavCartCompany(Integer orderType, List<UavCartCompanyDTO> uavCartCompanyDTOS){
public void buildUavCartCompany(List<UavCartCompanyDTO> uavCartCompanyDTOS){
List<PriceStockQO> priceStockQOS = new ArrayList<>();
for (UavCartCompanyDTO uavCartCompanyDTO : uavCartCompanyDTOS) {
for (UavCartDTO uavCartDO : uavCartCompanyDTO.getUavCartDOS()) {
......@@ -96,7 +96,6 @@ public class UavCartServiceImpl implements UavCartService {
}
// 最新规格信息
List<UavCartDTO> uavCartDTOS = pmsAppApi.listPriceStock(priceStockQOS);
// 更新最新的规格信息
for (UavCartCompanyDTO uavCartCompanyDTO : uavCartCompanyDTOS) {
uavCartCompanyDTO.setCompanyName(uavCartCompanyDTO.getUavCartDOS().get(0).getCompanyName());
......@@ -121,14 +120,6 @@ public class UavCartServiceImpl implements UavCartService {
uavCartDTO.setDeleted(1);
}
}
// for (UavCartCompanyDTO cartCompanyDTO : uavCartCompanyDTOS) {
// List<UavCartDTO> cartDOS = cartCompanyDTO.getUavCartDOS();
// if (UavOrderType.PAY.getCode().equals(orderType)) {
// cartDOS.removeIf(i -> i.getPriceShow() != null && i.getPriceShow().equals(0));
// }else {
// cartDOS.removeIf(i -> i.getPriceShow() != null && i.getPriceShow().equals(1));
// }
// }
}
}
}
......@@ -14,6 +14,7 @@ import com.mmc.oms.dao.UserAddressDao;
import com.mmc.oms.dao.uav.UavOrderDao;
import com.mmc.oms.dao.uav.UavOrderExpressDao;
import com.mmc.oms.dao.uav.UavPODao;
import com.mmc.oms.dao.uav.UavPayWxDao;
import com.mmc.oms.entity.mall.UserAddressDO;
import com.mmc.oms.entity.uav.*;
import com.mmc.oms.enums.UavOrderStatus;
......@@ -68,6 +69,9 @@ public class UavOrderServiceImpl implements UavOrderService {
private UavPODao uavPODao;
@Autowired
private UavPayWxDao uavPayWxDao;
@Autowired
private DemandReleaseOrderService demandReleaseOrderService;
@Autowired
......@@ -654,7 +658,7 @@ public class UavOrderServiceImpl implements UavOrderService {
@Transactional
@Override
public ResultBody addOrderByCart(AddUavOrderByCartQO orderByCartQO, BaseAccountDTO currentAccount) {
uavCartService.buildUavCartCompany(orderByCartQO.getOrderType(), orderByCartQO.getCartCompanyDTOS());
uavCartService.buildUavCartCompany(orderByCartQO.getCartCompanyDTOS());
// 意向订单只能下一个商家的
if (orderByCartQO.getOrderType().equals(UavOrderType.SIGN.getCode()) && orderByCartQO.getCartCompanyDTOS().size() > 1) {
return ResultBody.error("意向订单仅限下单个商家的商品");
......@@ -693,7 +697,7 @@ public class UavOrderServiceImpl implements UavOrderService {
skuDOS.add(uavOrderSkuDO);
orderAmount = orderAmount.add(uavCartDTO.getSalePrice().multiply(BigDecimal.valueOf(uavCartDTO.getOrderNum())));
if (uavCartDTO.getShelfStatus().equals(0)) {
return ResultBody.error("所选规格无效");
return ResultBody.error(uavCartDTO.getTradeName() + " 已下架,请重新选择");
}
}
}else {
......@@ -764,7 +768,6 @@ public class UavOrderServiceImpl implements UavOrderService {
allSkuDOS.add(skuDO);
}
}
log.info("allSkuDOS:{}", JSONObject.toJSONString(allSkuDOS));
// 批量添加规格
uavOrderDao.addOrderSku(allSkuDOS);
// 多个添加收货地址
......@@ -779,7 +782,34 @@ public class UavOrderServiceImpl implements UavOrderService {
uavOrderExpressDao.batchAddOrderExpress(expressDOS);
// 批量标识购物车
uavCartService.batchRemove(cartIds);
return ResultBody.success();
List<UavOrderDTO> collect = orders.stream().map(UavOrderDO::buildUavOrderDTO).collect(Collectors.toList());
long unFinishPay = collect.stream().filter(i -> i.getStatusCode().equals(UavOrderStatus.PAYING.getCode())).count();
MultiUavOrderDTO multiUavOrderDTO = new MultiUavOrderDTO();
multiUavOrderDTO.setAllOtherAmount(allOtherAmount);
multiUavOrderDTO.setUavOrderDTOS(collect);
// 待订单个数大于1
if (unFinishPay > 1) {
String payNo = CodeUtil.multiUavOrderPayCode();
multiUavOrderDTO.setPayNo(payNo);
UavPayWxDO uavPayWx = new UavPayWxDO();
uavPayWx.setPayNo(payNo);
uavPayWx.setAmount(allOtherAmount);
uavPayWx.setTradeState("WAIT");
List<UavPayWxSubDO> payWxSubDOS = new ArrayList<>();
uavPayWxDao.addUavPayWx(uavPayWx);
collect.stream().forEach(i -> {
if (i.getStatusCode().equals(UavOrderStatus.PAYING.getCode())) {
UavPayWxSubDO uavPayWxSubDO = new UavPayWxSubDO();
uavPayWxSubDO.setUavPayWxId(uavPayWx.getId());
uavPayWxSubDO.setUavOrderId(i.getId());
uavPayWxSubDO.setAmount(i.getOtherAmount());
payWxSubDOS.add(uavPayWxSubDO);
}
});
uavPayWxDao.batchAddUavPayWxSub(payWxSubDOS);
}
return ResultBody.success(multiUavOrderDTO);
}
public ResultBody deductWallet(BigDecimal allShareAmount, BigDecimal allSalaryAmount, BaseAccountDTO currentAccount){
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.oms.dao.uav.UavPayWxDao">
<sql id="UAV_PAY_WX_COLUMN">
id, pay_no, amount, trade_state, create_time
</sql>
<sql id="UAV_PAY_WX_SUB_COLUMN">
id, uav_pay_wx_id, uav_order_id, amount, create_time
</sql>
<insert id="addUavPayWx" parameterType="com.mmc.oms.entity.uav.UavPayWxDO" keyProperty="id" useGeneratedKeys="true">
insert into uav_pay_wx (pay_no, amount, trade_state, create_time)
values (#{payNo}, #{amount}, #{tradeState}, NOW())
</insert>
<insert id="batchAddUavPayWxSub" keyProperty="id" useGeneratedKeys="true">
insert into uav_pay_wx_sub( uav_pay_wx_id, uav_order_id, amount, create_time)
values
<foreach item="item" collection="list" separator=",">
(#{item.uavPayWxId}, #{item.uavOrderId}, #{item.amount}, NOW())
</foreach>
</insert>
<select id="getUavPayWx" resultType="com.mmc.oms.entity.uav.UavPayWxDO">
select <include refid="UAV_PAY_WX_COLUMN"/>
from uav_pay_wx where pay_no = #{payNo}
</select>
<select id="listUavPayWxSub" resultType="com.mmc.oms.entity.uav.UavPayWxSubDO">
select <include refid="UAV_PAY_WX_SUB_COLUMN"/>
from uav_pay_wx_sub where uav_pay_wx_id = #{uavPayWxId}
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论