提交 0349ee5f 作者: xiaowang

Merge branch 'develop' of ssh://git.mmcuav.cn:8222/iuav/oms into develop

 Conflicts:
	src/main/java/com/mmc/oms/service/uav/impl/UavOrderServiceImpl.java
......@@ -14,4 +14,4 @@ patches:
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/oms
newTag: a4870374737ddbbcbffe5b315083b5d88d9ebbe9
newTag: e4c8c94ca488ff141cb02a3151438d95f7d4ae8d
......@@ -239,6 +239,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));
}
......
......@@ -21,6 +21,4 @@ public interface UserAddressDao {
UserAddressDO selectById(Integer userAddressId);
List<UserAddressDO> selectList(UserAddressDO userAddressDO);
void batchAddOrderExpress(List<UavOrderExpressDO> expressDOS);
}
......@@ -18,4 +18,6 @@ public interface UavOrderExpressDao {
int updateUavOrderExpressDO(UavOrderExpressDO uavOrderExpressDO);
List<UavOrderExpressDO> listNoReceive();
void batchAddOrderExpress(List<UavOrderExpressDO> expressDOS);
}
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);
void finishUavPayWx(String orderNo, String tradeState);
}
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 String orderNo;
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位
......
......@@ -55,7 +55,8 @@ public class ServiceOrderTaskServiceImpl
@Autowired private PmsClient pmsClient;
@Autowired private UserClient userClient;
@Autowired
private UserAppApi userAppApi;
@Autowired private HttpUtil httpUtil;
......@@ -162,7 +163,7 @@ public class ServiceOrderTaskServiceImpl
}
private Map<Integer, UserAccountSimpleDTO> getUserDTOMap(HttpServletRequest request, List<Integer> userIds) {
List<UserAccountSimpleDTO> userList = userClient.feignListUserAccountByIds(userIds, request.getHeader(TokenConstant.TOKEN));
List<UserAccountSimpleDTO> userList = userAppApi.feignListUserAccountByIds(userIds, request.getHeader(TokenConstant.TOKEN));
Map<Integer, UserAccountSimpleDTO> userMap = new HashMap<>();
if(CollectionUtils.isNotEmpty(userList)){
userMap = userList.stream().collect(Collectors.toMap(UserAccountSimpleDTO::getId, d -> d, (k1, k2) -> k1));
......
......@@ -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);
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));
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,9 +96,6 @@ public class UavCartServiceImpl implements UavCartService {
}
// 最新规格信息
List<UavCartDTO> uavCartDTOS = pmsAppApi.listPriceStock(priceStockQOS);
if (CollectionUtils.isEmpty(uavCartDTOS)) {
return;
}
// 更新最新的规格信息
for (UavCartCompanyDTO uavCartCompanyDTO : uavCartCompanyDTOS) {
uavCartCompanyDTO.setCompanyName(uavCartCompanyDTO.getUavCartDOS().get(0).getCompanyName());
......@@ -120,13 +117,7 @@ public class UavCartServiceImpl implements UavCartService {
// 找不到或被删除则置为失效
if (!flag || uavCartDTO.getDeleted().equals(1)) {
uavCartDTO.setShelfStatus(0);
}
}
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()));
uavCartDTO.setDeleted(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
......@@ -86,14 +90,14 @@ public class UavOrderServiceImpl implements UavOrderService {
@Transactional
public ResultBody addOrder(AddUavOrderVO param, BaseAccountDTO currentAccount) {
log.info("user:{},addOrder param:{}", currentAccount.getUserAccountId(), param);
if (CollectionUtils.isEmpty(param.getSkuVOS())) {
if (CollectionUtils.isEmpty(param.getSkuVOS())){
return ResultBody.error("至少选择一个规格!");
}
MallGoodsVO mallGoodsVO = null;
try {
mallGoodsVO = pmsClient.mallGoodsDetails(param.getMallGoodsId());
// 检验商品是否在卖
if (mallGoodsVO == null || !mallGoodsVO.getShelfStatus().equals(1)) {
if (mallGoodsVO == null || !mallGoodsVO.getShelfStatus().equals(1)){
return ResultBody.error("商品已下架");
}
// 找到对应的规格
......@@ -107,11 +111,11 @@ public class UavOrderServiceImpl implements UavOrderService {
break;
}
}
if (!flag) {
if (!flag){
return ResultBody.error("选择规格不存在");
}
}
} catch (Exception e) {
}catch (Exception e){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
e.printStackTrace();
}
......@@ -129,31 +133,31 @@ public class UavOrderServiceImpl implements UavOrderService {
BigDecimal salaryAmount = BigDecimal.ZERO;
Integer statusCode = null;
// 正常订单可以抵扣云享金和余额、意向订单不能扣
if (param.getOrderType().equals(UavOrderType.PAY.getCode())) {
if (param.getOrderType().equals(UavOrderType.PAY.getCode())){
ResultBody<PayWalletDTO> payResInfo = userAppApi.getCurrentUserPayWalletInfo(currentAccount.getToken());
if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payResInfo.getResult() == null) {
if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payResInfo.getResult() == null){
return payResInfo;
}
PayWalletDTO payWalletDTO = payResInfo.getResult();
if (param.getDeductShareAmount().equals(1)) {
if (param.getDeductShareAmount().equals(1)){
if (otherAmount.compareTo(payWalletDTO.getCashAmt()) >= 0) {
// 抵扣云享金小于等于订单总额时,直接使用云享金
shareAmount = payWalletDTO.getCashAmt();
} else {
}else {
// 余额超过订单金额时,订单总额使用余额支付
shareAmount = otherAmount;
}
}
otherAmount = otherAmount.subtract(shareAmount);
// 支付完成
if (otherAmount.compareTo(BigDecimal.ZERO) == 0) {
if (otherAmount.compareTo(BigDecimal.ZERO) == 0 ){
statusCode = UavOrderStatus.WAITING_DELIVER_GOODS.getCode();
} else {
if (param.getDeductSalaryAmount().equals(1)) {
}else {
if (param.getDeductSalaryAmount().equals(1)){
if (otherAmount.compareTo(payWalletDTO.getSalaryAmt()) >= 0) {
// 抵扣余额小于等于订单总额时,直接使用余额
salaryAmount = payWalletDTO.getSalaryAmt();
} else {
}else {
// 余额超过订单金额时,订单总额使用余额支付
salaryAmount = otherAmount;
}
......@@ -171,9 +175,9 @@ public class UavOrderServiceImpl implements UavOrderService {
uavOrderDO.setOrderNo(orderNo);
uavOrderDO.setOrderTotalAmount(orderTotalAmount);
uavOrderDO.setOrderType(param.getOrderType());
if (param.getOrderType().equals(UavOrderType.PAY.getCode())) {
if (param.getOrderType().equals(UavOrderType.PAY.getCode())){
uavOrderDO.setStatusCode(otherAmount.compareTo(BigDecimal.ZERO) > 0 ? UavOrderStatus.PAYING.getCode() : statusCode);
} else {
}else {
uavOrderDO.setStatusCode(UavOrderStatus.CONFIRM.getCode());
}
uavOrderDO.setUserAccountId(currentAccount.getUserAccountId());
......@@ -224,7 +228,7 @@ public class UavOrderServiceImpl implements UavOrderService {
List<UavOrderPayDTO> collect = payDOS.stream().map(UavOrderPayDO::buildUavOrderPayDTO).collect(Collectors.toList());
uavOrderDTO.setPayDTOList(collect);
}
List<UavOrderSkuDO> skuDOS = uavOrderDao.listUavOrderSkuDO(id);
List<UavOrderSkuDO> skuDOS =uavOrderDao.listUavOrderSkuDO(id);
if (CollectionUtils.isNotEmpty(skuDOS)) {
List<UavOrderSkuDTO> uavOrderSkuDTOS = skuDOS.stream().map(UavOrderSkuDO::buildUavOrderSkuDTO).collect(Collectors.toList());
uavOrderDTO.setSkuDTOList(uavOrderSkuDTOS);
......@@ -282,7 +286,7 @@ public class UavOrderServiceImpl implements UavOrderService {
payUavWalletVO.setOrderStatus(1400);
payUavWalletVO.setUserAccountId(uavOrderDO.getUserAccountId());
ResultBody resultBody = userAppApi.feignPayUavWallet(payUavWalletVO, token);
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())){
return resultBody;
}
}
......@@ -306,7 +310,7 @@ public class UavOrderServiceImpl implements UavOrderService {
@Override
public ResultBody list(UavOrderQO uavOrderQO, BaseAccountDTO currentAccount) {
if (!currentAccount.getRoleInfo().getSuperAdmin().equals(1)) {
if (!currentAccount.getRoleInfo().getSuperAdmin().equals(1)){
uavOrderQO.setThirdBackUserAccountId(currentAccount.getUserAccountId());
uavOrderQO.setOrderType(UavOrderType.PAY.getCode());
}
......@@ -461,7 +465,7 @@ public class UavOrderServiceImpl implements UavOrderService {
}
@Transactional
public void updateUavOrderStatus(Integer id, UavOrderStatus uavOrderStatus) {
public void updateUavOrderStatus(Integer id, UavOrderStatus uavOrderStatus){
uavOrderDao.updateUavOrderStatus(id, uavOrderStatus.getNextCode());
}
......@@ -502,7 +506,7 @@ public class UavOrderServiceImpl implements UavOrderService {
UavOrderPayDO beforeUavOrderPayDO = uavOrderDao.getUavOrderPayById(uavOrderPayVO.getId());
// 一个订单可能会多次上传付款凭证,因此单独审核
UavOrderDO uavOrderDO = uavOrderDao.detail(beforeUavOrderPayDO.getUavOrderId());
if (uavOrderPayVO.getCheckStatus().equals(1)) {
if (uavOrderPayVO.getCheckStatus().equals(1)){
// 第一次审核通过,则要把订单状态改为待发货;意向订单还要生成采购订单
if (uavOrderDO.getStatusCode().equals(UavOrderStatus.FINISH_PAYING.getCode())) {
this.updateUavOrderStatus(beforeUavOrderPayDO.getUavOrderId(), UavOrderStatus.FINISH_PAYING);
......@@ -516,7 +520,7 @@ public class UavOrderServiceImpl implements UavOrderService {
uavPurchaseOrderDO.setStatusCode(UavOrderStatus.CONFIRM.getCode());
uavPODao.addPurchaseOrder(uavPurchaseOrderDO);
}
} else {
}else {
if (uavOrderDO.getStatusCode().equals(UavOrderStatus.FINISH_PAYING.getCode())) {
// 第一次未通过,需要走回上一步
this.updateUavOrderStatus(beforeUavOrderPayDO.getUavOrderId(), UavOrderStatus.SIGN);
......@@ -530,6 +534,15 @@ public class UavOrderServiceImpl implements UavOrderService {
@Transactional
@Override
public void payUavOrder(TopUpOrderVO topUpOrderVO) {
if (topUpOrderVO.getOrderNo().startsWith("m")){
payMultiUavOrder(topUpOrderVO);
}else {
paySingleUavOrder(topUpOrderVO);
}
}
@Transactional
public void paySingleUavOrder(TopUpOrderVO topUpOrderVO) {
// 添加支付凭证、记录支付方式
UavOrderDO uavOrderDO = uavOrderDao.detailByNo(topUpOrderVO.getOrderNo());
if (uavOrderDO == null) {
......@@ -552,6 +565,24 @@ public class UavOrderServiceImpl implements UavOrderService {
}
@Transactional
public void payMultiUavOrder(TopUpOrderVO topUpOrderVO) {
UavPayWxDO uavPayWx = uavPayWxDao.getUavPayWx(topUpOrderVO.getOrderNo());
if (uavPayWx != null) {
List<UavPayWxSubDO> payWxSubDOS = uavPayWxDao.listUavPayWxSub(uavPayWx.getId());
for (UavPayWxSubDO wxSubDO : payWxSubDOS) {
TopUpOrderVO upOrderVO = new TopUpOrderVO();
upOrderVO.setOpenid(topUpOrderVO.getOpenid());
upOrderVO.setOrderNo(wxSubDO.getOrderNo());
upOrderVO.setAmount(wxSubDO.getAmount().multiply(BigDecimal.valueOf(100)).intValue());
upOrderVO.setTradeState(topUpOrderVO.getTradeState());
upOrderVO.setTradeStateDesc(topUpOrderVO.getTradeStateDesc());
this.paySingleUavOrder(upOrderVO);
}
}
uavPayWxDao.finishUavPayWx(topUpOrderVO.getOrderNo(), topUpOrderVO.getTradeState());
}
@Transactional
@Override
public ResultBody confirmOrder(UavOrderVO uavOrderVO, BaseAccountDTO currentAccount) {
// 修改订单状态
......@@ -569,7 +600,7 @@ public class UavOrderServiceImpl implements UavOrderService {
if (uavOrderDO.getOrderType().equals(UavOrderType.SIGN.getCode())) {
ResultBody<PayWalletDTO> payResInfo = userAppApi.getPayWalletInfo(uavOrderDO.getUserAccountId(), currentAccount.getToken());
PayWalletDTO payWalletDTO = payResInfo.getResult();
if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payWalletDTO == null) {
if (!payResInfo.getCode().equals(ResultEnum.SUCCESS.getResultCode()) || payWalletDTO == null){
return payResInfo;
}
// 要扣除的云享金
......@@ -581,11 +612,11 @@ public class UavOrderServiceImpl implements UavOrderService {
// 根据订单总额确认扣除多少云享金
if (uavOrderVO.getOrderTotalAmount().compareTo(payWalletDTO.getCashAmt()) >= 0) {
shareAmount = payWalletDTO.getCashAmt();
} else {
}else {
shareAmount = uavOrderVO.getOrderTotalAmount();
}
// 抵扣
if (shareAmount.compareTo(BigDecimal.ZERO) > 0) {
if (shareAmount.compareTo(BigDecimal.ZERO) > 0 ) {
PayUavWalletVO payUavWalletVO = new PayUavWalletVO();
payUavWalletVO.setUserAccountId(uavOrderDO.getUserAccountId());
payUavWalletVO.setCashAmount(shareAmount);
......@@ -594,7 +625,7 @@ public class UavOrderServiceImpl implements UavOrderService {
payUavWalletVO.setOrderStatus(100);
payUavWalletVO.setRemark("商城确认订单抵扣");
ResultBody resultBody = userAppApi.feignPayUavWallet(payUavWalletVO, currentAccount.getToken());
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())) {
if (!resultBody.getCode().equals(ResultEnum.SUCCESS.getResultCode())){
return resultBody;
}
}
......@@ -654,25 +685,19 @@ 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("意向订单仅限下单个商家的商品");
}
// 正常订单可以抵扣云享金和余额、意向订单不能扣
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();
// 购物车id
List<Integer> cartIds = new ArrayList<>();
// 可以多商家多商品,为每个商家生成一个订单
List<UavOrderDO> orders = new ArrayList<UavOrderDO>();
BigDecimal allOtherAmount = BigDecimal.ZERO;
......@@ -698,36 +723,46 @@ public class UavOrderServiceImpl implements UavOrderService {
UavOrderSkuDO uavOrderSkuDO = new UavOrderSkuDO(uavCartDTO);
skuDOS.add(uavOrderSkuDO);
orderAmount = orderAmount.add(uavCartDTO.getSalePrice().multiply(BigDecimal.valueOf(uavCartDTO.getOrderNum())));
if (uavCartDTO.getShelfStatus().equals(0)) {
return ResultBody.error(uavCartDTO.getTradeName() + " 已下架,请重新选择");
}
}
}else {
return ResultBody.error("所选规格无效");
}
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());
// 正常订单可以抵扣云享金和余额、意向订单不能扣
if (orderByCartQO.getOrderType().equals(UavOrderType.PAY.getCode())){
// 抵扣云享金
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));
}
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);
// 抵扣余额
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));
}
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();
if (otherAmount.compareTo(BigDecimal.ZERO) == 0) {
statusCode = UavOrderStatus.WAITING_DELIVER_GOODS.getCode();
}else {
statusCode = UavOrderStatus.PAYING.getCode();
}
}else {
statusCode = UavOrderStatus.CONFIRM.getCode();
}
// 设置订单状态
uavOrderDO.setStatusCode(statusCode);
......@@ -747,7 +782,9 @@ public class UavOrderServiceImpl implements UavOrderService {
allOtherAmount = allOtherAmount.add(otherAmount);
}
// 抵扣余额
this.deductWallet(allShareAmount, allSalaryAmount, currentAccount);
if (allShareAmount.compareTo(BigDecimal.ZERO) > 0 || allSalaryAmount.compareTo(BigDecimal.ZERO) > 0) {
this.deductWallet(allShareAmount, allSalaryAmount, currentAccount);
}
// 添加订单信息
uavOrderDao.batchAddOrder(orders);
// 全部规格信息
......@@ -769,10 +806,38 @@ public class UavOrderServiceImpl implements UavOrderService {
expressDOS.add(uavOrderExpressDO);
}
// 批量添加收货地址
userAddressDao.batchAddOrderExpress(expressDOS);
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 > 0) {
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.setOrderNo(i.getOrderNo());
uavPayWxSubDO.setAmount(i.getOtherAmount());
payWxSubDOS.add(uavPayWxSubDO);
}
});
uavPayWxDao.batchAddUavPayWxSub(payWxSubDOS);
}
return ResultBody.success(multiUavOrderDTO);
}
@Override
......
......@@ -26,14 +26,6 @@
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
......
......@@ -13,6 +13,14 @@
values (#{uavOrderId}, #{sendExpNo}, #{sendExpCode}, #{takeName}, #{takePhone}, #{takeRegion}, #{takeAddress}, NOW())
</insert>
<insert id="batchAddOrderExpress">
insert into uav_order_express(uav_order_id, send_exp_no, send_exp_code, take_name, take_phone, take_region, take_address, create_time)
values
<foreach item="item" collection="list" separator=",">
(#{item.uavOrderId}, #{item.sendExpNo}, #{item.sendExpCode}, #{item.takeName}, #{item.takePhone}, #{item.takeRegion}, #{item.takeAddress}, NOW())
</foreach>
</insert>
<update id="updateUavOrderExpressDO" parameterType="com.mmc.oms.entity.uav.UavOrderExpressDO">
update uav_order_express
<set>
......
<?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, order_no, 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, order_no, amount, create_time)
values
<foreach item="item" collection="list" separator=",">
(#{item.uavPayWxId}, #{item.uavOrderId}, #{item.orderNo}, #{item.amount}, NOW())
</foreach>
</insert>
<update id="finishUavPayWx">
update uav_pay_wx set trade_state = #{tradeState} where pay_no = #{payNo}
</update>
<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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论