diff --git a/mallinkAdmin/src/main/resources/db/migration/V201910211400__ALTER_ORDER.sql b/mallinkAdmin/src/main/resources/db/migration/V201910211400__ALTER_ORDER.sql new file mode 100644 index 000000000..11b5459b8 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201910211400__ALTER_ORDER.sql @@ -0,0 +1,2 @@ +ALTER TABLE `wx_order` +ADD COLUMN `total_payment` int(11) NULL COMMENT '总支付金额'; \ No newline at end of file diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index f37114e76..8b9fb1625 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -1,9 +1,11 @@ package com.iformall.controller; import com.github.pagehelper.PageInfo; +import com.iformall.annotation.AuthIgnore; import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCouponOrder; import com.iformall.domain.po.WxMerchantBUser; @@ -11,6 +13,7 @@ import com.iformall.domain.vo.WxCouponOrderCVo; import com.iformall.enums.EnumCreditLockedStatus; import com.iformall.exception.MallinkException; import com.iformall.service.WxCUserBasicInfoService; +import com.iformall.service.WxCUserService; import com.iformall.service.WxCouponOrderService; import com.iformall.service.WxMerchantBUserService; import io.swagger.annotations.Api; @@ -23,7 +26,10 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; import java.util.Date; +import java.util.HashMap; +import java.util.List; import java.util.Map; @RestController @@ -41,6 +47,9 @@ public class WxCouponOrderController extends BaseController { @Autowired private WxCUserBasicInfoService wxCUserBasicInfoService; + @Autowired + private WxCUserService wxCUserService; + @ApiOperation("分页列表接口") @GetMapping("list") @@ -210,4 +219,39 @@ public class WxCouponOrderController extends BaseController { return new ResultData(); } + + @ApiOperation(value = "获取C端用户可用券", notes = "{\"cUserId\":\"必填\",\"payPrice\":\"支付金额\"}") + @PostMapping("getAvailCouponOrder") + public ResultData getAvailCouponOrder(@RequestBody Map paramMap) { + WxMerchantBUser user = getUser(); + String cUserIdStr = paramMap.get("cUserId"); + String payPriceStr = paramMap.get("payPrice"); + if (StringUtils.isBlank(cUserIdStr)) { + logger.error("cUserId不能为空: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if (StringUtils.isBlank(payPriceStr)) { + logger.error("payPriceStr不能为空: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + + BigDecimal totalFee = new BigDecimal(payPriceStr); + totalFee.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) + Integer payPrice = totalFee.multiply(new BigDecimal(100)).intValue(); + Long cUserId = 0L; + try { + cUserId = Long.valueOf(cUserIdStr); + } catch (NumberFormatException e) { + cUserId = 0L; + logger.error("cUserId参数不正确: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_CLASSCAST_ERROR); + } + + WxCUser cUser = wxCUserService.getById(cUserId); + + List avaList = wxCouponOrderService.queryMicroPayCouponOrder(user, cUser, payPrice); + return new ResultData(avaList); + } + + } diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java index a11545936..fb176c313 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java @@ -4,9 +4,8 @@ package com.iformall.controller; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.domain.po.*; -import com.iformall.enums.EnumOrderType; -import com.iformall.enums.EnumPayType; -import com.iformall.enums.EnumPayWay; +import com.iformall.domain.vo.WxCouponOrderCVo; +import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.service.*; import com.iformall.utils.IPUtil; @@ -21,6 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.Date; import java.util.Map; /** @@ -50,7 +51,13 @@ public class WxMicroPayController extends BaseController { @Autowired WxAppinfoService wxAppinfoService; - @ApiOperation(value = "付款码支付订单", notes = "params:{\"authCode\":\"String\",\"totalFee\":\"String\"},\n" + + @Autowired + WxCouponOrderService wxCouponOrderService; + + @Autowired + private WxCUserBasicInfoService wxCUserBasicInfoService; + + @ApiOperation(value = "付款码支付订单", notes = "params:{\"authCode\":\"String\",\"totalFee\":\"实际支付金额\", ,\"totalPay\":\"总支付金额\"},\n" + "注意:\n" + "提醒1:提交支付请求后微信会同步返回支付结果。当返回结果为“系统错误”时,商户系统等待5秒后调用【查询订单API】,查询支付实际交易结果;当返回结果为“USERPAYING”时,商户系统可设置间隔时间(建议10秒)重新查询支付结果,直到支付成功或超时(建议30秒);\n" + "提醒2:在调用查询接口返回后,如果交易状况不明晰,请调用【撤销订单API】,此时如果交易失败则关闭订单,该单不能再支付成功;如果交易成功,则将扣款退回到用户账户。当撤销无返回或错误时,请再次调用。注意:请勿扣款后立即调用【撤销订单API】,建议至少15秒后再调用。撤销订单API需要双向证书。") @@ -61,6 +68,7 @@ public class WxMicroPayController extends BaseController { //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名"); String authCode = paramMap.get("authCode"); String totalFeeStr = paramMap.get("totalFee"); + String totalPayStr = paramMap.get("totalPay"); if (StringUtils.isBlank(authCode)) { logger.error("authCode不能为空"); @@ -77,7 +85,7 @@ public class WxMicroPayController extends BaseController { WxOrder order = null; try { - order = wxOrderService.saveMicroPayOrder(user, totalFeeStr); + order = wxOrderService.saveMicroPayOrder(user, totalFeeStr, totalPayStr); } catch (MallinkException e) { logger.error("saveMicopayOrder 1" + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); @@ -258,4 +266,85 @@ public class WxMicroPayController extends BaseController { return new ResultData(ErrorCode.REFUND_ORDER_ERROR); } } + + @ApiOperation(value = "收银台核销券", notes = "{\"couponOrderId\":\"必填\",\"payPrice\":\"支付金额(分)\"}") + @PostMapping("userCouponOrderForMicroPay") + public ResultData userCouponOrderForMicroPay(@RequestBody Map paramMap) { + logger.info("couponOrderController.verify:"+paramMap.toString()); + String couponOrderIdStr = paramMap.get("couponOrderId"); + String payPriceStr = paramMap.get("payPrice"); + if (StringUtils.isBlank(couponOrderIdStr)) { + logger.error("couponOrderId不能为空: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + if (StringUtils.isBlank(payPriceStr)) { + logger.error("payPrice不能为空: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + Long couponOrderId = 0L; + BigDecimal totalFee = new BigDecimal(payPriceStr); + totalFee.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) + Integer payPrice = totalFee.multiply(new BigDecimal(100)).intValue(); + try { + couponOrderId = Long.valueOf(couponOrderIdStr); + } catch (NumberFormatException e) { + couponOrderId = 0L; + logger.error("couponOrderId参数不正确: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + + WxCouponOrderCVo wxCouponOrderCVo = wxCouponOrderService.detailCUserVo(couponOrderIdStr); + + if (wxCouponOrderCVo == null) + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(wxCouponOrderCVo.getcUserId()); + if (wxCUserBasicInfo != null && EnumCreditLockedStatus.CLOSE.getCode().equals(wxCUserBasicInfo.getStatus())) { + return new ResultData(ErrorCode.MEMBER_IS_LOCKED); + } + + if (wxCouponOrderCVo.getValidStartDate() != null && wxCouponOrderCVo.getValidEndDate() != null ) { + Date now = new Date(); + if (wxCouponOrderCVo.getValidStartDate().getTime() > now.getTime()) { + logger.error("此券有效期未开始:" + couponOrderIdStr); + return new ResultData(ErrorCode.COUPON_ORDER_IS_EARLIER_THAN_VALIDDATE); + } + if (wxCouponOrderCVo.getValidEndDate().getTime() < now.getTime()) { + logger.error("此券有效期已结束:" + couponOrderIdStr); + return new ResultData(ErrorCode.COUPON_ORDER_IS_LATER_THAN_VALIDDATE); + } + } + + WxCouponOrder wxCouponOrder = wxCouponOrderService.getById(couponOrderId); + if (wxCouponOrder == null) { + logger.error("券ID不存在:" + couponOrderId); + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + } + + WxMerchantBUser wxMerchantBUser = wxMerchantBUserService.getById(getUser().getId()); + if (wxMerchantBUser == null) { + logger.error("核销员ID不存在:" + getUser().getId()); + throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "核销员ID不存在或者无权限"); + } + wxMerchantBUser.setBuserId(getBuserId()); + WxCouponOrder couponOrder = null; + Integer remainPrice = payPrice; + try { + remainPrice = wxCouponOrderService.microPayVerify(wxCouponOrder, wxMerchantBUser, payPrice); + } catch (MallinkException e) { + logger.error("核销异常: " + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("核销异常: " + e.getMessage()); + return new ResultData(ErrorCode.VERIFY_ERROR, e.getMessage()); + } + + if(couponOrder != null) { + wxCouponOrderService.sendInsideCouponVerifyMsg(couponOrder.getTenantId(), couponOrderId, wxMerchantBUser.getId()); + } + Double remainPriceD = Double.valueOf(remainPrice); + String remainPriceStr = String.format("%.2f", remainPriceD); + + return new ResultData(remainPrice); + } } diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 1f4cdc7f3..d90ae549a 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -197,6 +197,8 @@ public enum ErrorCode{ COUPON_ORDER_IS_PRE_VERIFY(4008, "卡券已被预核销"), COUPON_SEND_LIMIT_VERIFY(4009, "商户购券数错误"), COUPON_HANDSEL_VERIFY(4010, "商户发券异常"), + COUPON_MANJIAN_USE_PRICE_NO_ALLOW_(4011, "满减券金额不符合条件"), + COUPON_ORDER_TYPE_NOT_SUPPORTED(4012, "券类型不支持"), /** * 卡 diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java index 4b6967b02..d8fa3a8dd 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java @@ -93,6 +93,9 @@ public class WxOrder extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="POS SN",name="posOrderCreateSn") private String posOrderCreateSn; + @io.swagger.annotations.ApiModelProperty(value="总支付金额(分),收银台用券时使用",name="totalPayment") + private Integer totalPayment; + @TableField(exist = false) protected List statusS; diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index 22e8ad7a1..32b713010 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java @@ -2,6 +2,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCUser; import com.iformall.domain.po.WxCouponOrder; import com.iformall.domain.po.WxMerchantBUser; import com.iformall.domain.vo.*; @@ -189,4 +190,12 @@ public interface WxCouponOrderService { ResultData queryCardStatus(WxCouponOrder wxCouponOrder); void exportData(WxCouponOrderBVo wxCouponOrder, HttpServletRequest request, HttpServletResponse response); + + /** + * B端-收银台-支持优惠券 + */ + List queryMicroPayCouponOrder(WxMerchantBUser user, WxCUser cUser, Integer price); + + Integer microPayVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer price); + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java index d68ab2380..e5b042982 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -42,7 +42,7 @@ public interface WxOrderService { * @param totalFeeStr * @return 订单id */ - WxOrder saveMicroPayOrder(WxMerchantBUser user, String totalFeeStr); + WxOrder saveMicroPayOrder(WxMerchantBUser user, String totalFeeStr, String totalPayStr); /** * 商户码-储值卡支付 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index 80c2fd5e5..3eae3936a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -37,6 +37,7 @@ import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; @Service public class WxCouponOrderServiceImpl implements WxCouponOrderService { @@ -1034,4 +1035,126 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { wxCardTransferInfoMapper.insert(wxCardTransferInfo); } + @Override + public List queryMicroPayCouponOrder(WxMerchantBUser user, WxCUser cUser, Integer payPrice) { + Map coQ = new HashMap<>(); + coQ.put("tenantId", user.getTenantId()); + coQ.put("cUserId", user.getId()); + coQ.put("merchantId", user.getMerchantId()); + List avaCoList = wxCouponOrderMapper.findAvailCouponOrder(coQ); + List avaCouponOrderList = avaCoList.stream().filter(couponOrderCVo -> { + if (couponOrderCVo.getType().equals(EnumCouponType.COUPON_MANJIAN.getCode())) { + if (payPrice > couponOrderCVo.getUsePrice()) { + return true; + } + } else { + return true; + } + return false; + }).collect(Collectors.toList()); + return avaCouponOrderList; + } + + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public Integer microPayVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer payPrice) { + + // 1. 获取券信息 + WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId()); + if (wxCoupon == null) { + logger.error("券: coupon-" + wxCoupon.getId() + "不存在" + "couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); + } + if (!(wxCoupon.getType().equals(EnumCouponType.COUPON_MANJIAN.getCode()) || + wxCoupon.getType().equals(EnumCouponType.COUPON_DAIJIN.getCode()) || + wxCoupon.getType().equals(EnumCouponType.COUPON_MULTIMCH.getCode()))) { + logger.error("收银台不支持此券类型: " + wxCoupon.getType()); + throw new MallinkException(ErrorCode.COUPON_ORDER_TYPE_NOT_SUPPORTED); + } + + // 2. 检查适用门店 + WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); + wxCouponMerchant.setProductId(wxCoupon.getId()); + wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); + List couponMerchantList = wxCouponMerchantMapper.findList(wxCouponMerchant); + if (!couponMerchantList.stream().anyMatch(cm -> cm.getMerchantId().equals(bUser.getMerchantId()))) { + logger.error("券: coupon-" + wxCoupon.getId() + "核销: couponMerchantId-" + bUser.getMerchantId()); + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); + } + + // 3. 券包状态检查 + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) { + logger.error("已过期: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME); + } + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()) { + logger.error("已退款: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID); + } + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { + logger.error("已经核销过的券: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); + } + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.POS_PRE_VERIFY.getCode()) { + logger.error("券已被预核销: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_PRE_VERIFY); + } + if (couponOrder.getCouponType().equals(EnumCouponType.COUPON_MANJIAN.getCode())) { + if (payPrice < wxCoupon.getUsePrice()) { + logger.error("券达不到满减条件: couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_PRE_VERIFY); + } + } + int num = 0; + try { + couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销 + couponOrder.setBUserId(bUser.getId()); + couponOrder.setVerifyType(EnumCouponVerifyType.VERIFY_B.getCode()); + couponOrder.setUpdateDate(new Date()); + num = wxCouponOrderMapper.updateVerifyCouponOrder(couponOrder); + } catch (Exception e) { + logger.error("db failed: couponOrder-" + couponOrder.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + if (num != 1) { + logger.error("核销异常:updatete num " + num); + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); + } + + // 成长值 + try { + WxOrder order = wxOrderMapper.selectById(couponOrder.getOrderId()); + wxScoreRulesService.addScore2(EnumScoreType.CONSUMPTION, order, wxCoupon.getBusiness()); + } catch (Exception e) { + logger.error("成长值:" + e.getMessage()); + } + + // 积分 + try { + //-------此处为【现金支付】记录增加积分操作------- + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setOperatorType(EnumUserType.BUSER.getCode()); + creditHistory.setOperatorId(bUser.getId()); + creditHistory.setCUserId(couponOrder.getcUserId()); + creditHistory.setCreateDate(new Date()); + creditHistory.setTenantId(couponOrder.getTenantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setCouponId(wxCoupon.getId()); + creditHistory.setBusinessId(wxCoupon.getBusiness()); + creditHistory.setSpend(couponOrder.getCouponPrice()); + //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 + creditHistory.setMerchantId(bUser.getMerchantId()); + creditHistory.setBuserId(bUser.getBuserId()); + wxCreditHistoryService.saveOrUpdate(creditHistory); + } catch (Exception e) { + logger.error("积分值:" + e.getMessage()); + } + + Integer remainPrice = payPrice - wxCoupon.getPrice(); + if (remainPrice < 0) { + remainPrice = 0; + } + return remainPrice; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index feeb373ed..9286b3341 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -18,6 +18,7 @@ import com.iformall.mapper.*; import com.iformall.mq.MqBaseProducer; import com.iformall.service.*; import com.iformall.utils.*; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -553,7 +554,7 @@ public class WxOrderServiceImpl implements WxOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxOrder saveMicroPayOrder(WxMerchantBUser user, String totalFeeStr) { + public WxOrder saveMicroPayOrder(WxMerchantBUser user, String totalFeeStr, String totalPayStr) { // 检查用户 if (user == null) { logger.error("用户不存在"); @@ -578,7 +579,13 @@ public class WxOrderServiceImpl implements WxOrderService { BigDecimal totalFee = new BigDecimal(totalFeeStr); totalFee.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) + Integer totalPayment = null; int payment = totalFee.multiply(new BigDecimal(100)).intValue(); + if (StringUtils.isNotBlank(totalFeeStr)) { + BigDecimal totalPay = new BigDecimal(totalPayStr); + totalPay.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) + totalPayment = totalPay.multiply(new BigDecimal(100)).intValue(); + } final IdWorker idWorker = IdWorker.get(); Long orderNumber = idWorker.nextId(); @@ -594,6 +601,7 @@ public class WxOrderServiceImpl implements WxOrderService { record.setProductId(user.getId()); record.setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); record.setPayment(payment); + record.setTotalPayment(totalPayment); record.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()); record.setDetail(bodyStr); record.setCreateDate(curr); diff --git a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml index 760c590b3..75a81b28e 100644 --- a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml @@ -21,12 +21,13 @@ + `id`,`order_number`,`tenant_id`,`c_user_id`,`coupon_channel_id`,`product_id`,`type`,`payment_type`,`payment`,`payment_time`,`order_status`,`create_date`,`update_date`,`detail`, - `press_end_date`,`press_current_num`,`press_current_value`,`order_group_id`,`form_id` + `press_end_date`,`press_current_num`,`press_current_value`,`order_group_id`,`form_id`,`total_payment`