diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/business/AccWalletInfoBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/business/AccWalletInfoBusiness.java index a5066d8..5437fc7 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/business/AccWalletInfoBusiness.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/business/AccWalletInfoBusiness.java @@ -226,7 +226,7 @@ public class AccWalletInfoBusiness { accTrade.setDeptId(sysUser.getDeptId()); } if(Objects.nonNull(operation.getOrderNo())) { - accTrade.setOrderNo(operation.getOrderNo().toString()); + accTrade.setOrderNo(operation.getOrderNo()); } accTrade.setMachineSn(operation.getDeviceSn()); this.accTradeService.insertAccTrade(accTrade); diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/AccTrade.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/AccTrade.java index 3a8851c..d9b9365 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/AccTrade.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/AccTrade.java @@ -105,7 +105,7 @@ public class AccTrade extends BaseEntity { /** 商户订单号 */ @Excel(name = "商户订单号") @ApiModelProperty(value = "商户订单号") - private String orderNo; + private Long orderNo; /** 关联原记录交易id */ @Excel(name = "关联原记录交易id") diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/vo/AccTradeVo.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/vo/AccTradeVo.java index 6c8d40d..4acd0f9 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/vo/AccTradeVo.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/vo/AccTradeVo.java @@ -9,7 +9,7 @@ import java.util.Date; public class AccTradeVo { private Long userId; private Long deptId; - private String orderNo;//商户订单号, 商户网站订单系统中唯一订单号,必填 + private Long orderNo;//商户订单号, 商户网站订单系统中唯一订单号,必填 private String orderName;//订单名称, 必填 private BigDecimal paymentAmount;//付款金额, 必填 private String productDesc;//商品描述 diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccTradeMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccTradeMapper.java index 9b67a74..a056d31 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccTradeMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccTradeMapper.java @@ -23,7 +23,7 @@ public interface AccTradeMapper { */ public AccTrade selectAccTradeByTradeId(Long tradeId); - public List selectAccTradeByOrderNo(String orderNo); + public List selectAccTradeByOrderNo(Long orderNo); /** * 查询账户交易记录列表 diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccTradeService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccTradeService.java index 3cc5c39..f8b653c 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccTradeService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccTradeService.java @@ -24,7 +24,7 @@ public interface IAccTradeService { */ public AccTrade selectAccTradeByTradeId(Long tradeId); - public List selectAccTradeByOrderNo(String orderNo); + public List selectAccTradeByOrderNo(Long orderNo); /** * 查询账户交易记录列表 diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccTradeServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccTradeServiceImpl.java index 97b058f..5baa338 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccTradeServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccTradeServiceImpl.java @@ -45,7 +45,7 @@ public class AccTradeServiceImpl implements IAccTradeService { } @Override - public List selectAccTradeByOrderNo(String orderNo) { + public List selectAccTradeByOrderNo(Long orderNo) { return accTradeMapper.selectAccTradeByOrderNo(orderNo); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/order/service/impl/OrderInfoServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/order/service/impl/OrderInfoServiceImpl.java index f889f81..07fe49e 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/order/service/impl/OrderInfoServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/order/service/impl/OrderInfoServiceImpl.java @@ -159,6 +159,7 @@ public class OrderInfoServiceImpl implements IOrderInfoService AccInfoDetailsVO accInfoVO = this.accInfoService.queryAccInfoByUserId(orderAddParam.getUserId()); accInfoService.checkAccStatus(accInfoVO); List canteenOrderInfoList = new OrderInfo().of(orderAddParam); + checkDeviceOrderExisting(canteenOrderInfoList); checkOrdersTotalAmount(canteenOrderInfoList, orderAddParam.getRealAmount()); List orderInfoList = orderBusiness.orderPlaceHandler(canteenOrderInfoList); try { @@ -184,6 +185,7 @@ public class OrderInfoServiceImpl implements IOrderInfoService AccInfoDetailsVO accInfoVO = this.accInfoService.queryAccInfoByUserId(orderAddParam.getUserId()); accInfoService.checkAccStatus(accInfoVO); List canteenOrderInfoList = new ShopOrderAddParam().of(orderAddParam); + checkDeviceOrderExisting(canteenOrderInfoList); List orderInfoList = orderBusiness.orderPlaceHandler(canteenOrderInfoList); try { AccRedisUtils.lockUpdateAccWalletBalance(orderAddParam.getUserId()); @@ -197,6 +199,18 @@ public class OrderInfoServiceImpl implements IOrderInfoService return 1; } + private void checkDeviceOrderExisting(List orderInfoList) { + if(CollUtil.isEmpty(orderInfoList)) { + throw new ServiceException("订单不能为空"); + } + for (OrderInfo orderInfo : orderInfoList) { + OrderInfo orderInfoByOrderId = orderInfoMapper.selectOrderInfoByDeviceOrderId(orderInfo.getDeviceOrderId()); + if(Objects.nonNull(orderInfoByOrderId)) { + throw new ServiceException("该设备订单已存在"); + } + } + } + @Override public void pay(Long orderId) { if(Objects.isNull(orderId) || orderId <= 0) { diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java index 8a8e9a9..8d84b85 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java @@ -76,14 +76,14 @@ public class NotifyCotroller { String third_trade_no = request.getParameter("trade_no"); //交易状态 String trade_status = request.getParameter("trade_status"); - AccTrade accTradeInDB = accTradeService.selectAccTradeByOrderNo(order_no).get(0); + AccTrade accTradeInDB = accTradeService.selectAccTradeByOrderNo(Long.valueOf(order_no)).get(0); if (AliPayTradeStatusEnum.TRADE_STATUS_FINISHED.getKey().equals(trade_status)) { //判断该笔订单是否已经做过处理 //如果没做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详情,判断金额是否等于 total_amount,并执行商户的业务程序 //如果做过处理,不执行商户的业务程序 //注意: 退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态 TRADE_FINISHED AccTradeVo updateTrade = new AccTradeVo(); - updateTrade.setOrderNo(order_no); + updateTrade.setOrderNo(Long.valueOf(order_no)); updateTrade.setThirdTradeNo(third_trade_no); updateTrade.setPayState(PayStateEnum.PAY_SUCC.getKey()); updateTrade.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue()); @@ -105,7 +105,7 @@ public class NotifyCotroller { //如果做过处理,不执行商户的业务程序 //注意: 付款完成后,支付宝系统发送该交易状态 TRADE_SUCCESS AccTradeVo updateTrade = new AccTradeVo(); - updateTrade.setOrderNo(order_no); + updateTrade.setOrderNo(Long.valueOf(order_no)); updateTrade.setThirdTradeNo(third_trade_no); updateTrade.setPayState(PayStateEnum.PAY_SUCC.getKey()); updateTrade.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue()); @@ -123,7 +123,7 @@ public class NotifyCotroller { this.accTradeService.updateAccTradeVoByOrderNo(updateTrade); } else { AccTradeVo updateTrade = new AccTradeVo(); - updateTrade.setOrderNo(order_no); + updateTrade.setOrderNo(Long.valueOf(order_no)); updateTrade.setThirdTradeNo(third_trade_no); updateTrade.setPayState(PayStateEnum.PAY_FAIL.getKey()); updateTrade.setTradeState(AccTradeStateEnum.CLOSE.getKey().longValue()); diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java index 683ddae..7e2454e 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java @@ -22,6 +22,7 @@ import com.bonus.canteen.core.pay.constants.PayTypeEnum; import com.bonus.canteen.core.pay.util.AlipayConfig; import com.bonus.canteen.core.account.domain.vo.AccTradeVo; import com.bonus.common.houqin.constant.GlobalConstants; +import com.bonus.common.houqin.utils.id.Id; import com.bonus.common.security.utils.SecurityUtils; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; @@ -63,7 +64,7 @@ public class PayController { accTradeVo.setTradeType(AccTradeTypeEnum.CONSUME.getKey().longValue()); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - accTradeVo.setOrderNo(sdf.format(date) + "_" + GlobalConstants.TENANT_ID + "_" + SecurityUtils.getUserId()); + accTradeVo.setOrderNo(Id.next()); accTradeVo.setOrderName(accTradeVo.getOrderNo() + "_" + GlobalConstants.PERSONAL_RECHARGE); accTradeVo.setTradeTime(new Date()); accTradeVo.setAmount(accTradeVo.getPaymentAmount().multiply(new BigDecimal(100)).longValue());