From 9a22a08ae3f664cd84a660f67fae5ea891f6f4e5 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Thu, 16 Feb 2023 18:24:17 +0800 Subject: [PATCH] fix card --- .../market/WxCardPayController.java | 1 - .../controller/market/WxCouponController.java | 35 +++- .../db/migration/V2023021400001__card.sql | 105 ++++++++++ .../controller/WxCardPayController.java | 188 +++++++++++++++++- .../com/iformall/domain/po/WxCardInfo.java | 14 +- .../java/com/iformall/domain/po/WxCoupon.java | 3 + .../com/iformall/enums/EnumCardInfoType.java | 36 ++++ .../enums/EnumCouponPasswordStatus.java | 5 +- .../iformall/enums/EnumCouponSendType.java | 2 +- .../com/iformall/mapper/WxCouponMapper.java | 2 + .../iformall/service/WxCardInfoService.java | 4 + .../com/iformall/service/WxCouponService.java | 2 + .../service/impl/WxCardInfoServiceImpl.java | 58 ++++++ .../service/impl/WxCardSpendServiceImpl.java | 62 +++--- .../service/impl/WxCouponServiceImpl.java | 36 +++- .../service/impl/WxOrderServiceImpl.java | 1 + .../java/com/iformall/utils/Constant.java | 4 + .../resources/mapper/WxCardInfoMapper.xml | 10 +- .../main/resources/mapper/WxCouponMapper.xml | 25 ++- 19 files changed, 531 insertions(+), 62 deletions(-) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V2023021400001__card.sql create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumCardInfoType.java diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java index a080e1e2c..17a75d340 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java @@ -62,7 +62,6 @@ public class WxCardPayController extends BaseController { @SystemControllerLog(description = "储值卡支付-售卡记录列表") public ResultData cardOrderList(@ModelAttribute WxCardVo wxCardVo, Integer pageNum, Integer pageSize) { String ipStr = getIpAddr(); - logger.info("cardPay/cardOrderList: " + ipStr); if (wxCardVo == null) {wxCardVo = new WxCardVo();} else { if(StringUtils.isBlank(wxCardVo.getOuPhone())) { diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java index 1b779efa8..3b0b37fee 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponController.java @@ -194,7 +194,7 @@ public class WxCouponController extends BaseController { return resultData; } - + @TenantIgnore @ApiOperation("根据id更新接口") @PostMapping("update") @@ -402,6 +402,39 @@ public class WxCouponController extends BaseController { CouponCacheUtils.removeCouponCache(redisTemplate, wxCoupon.getId()); return new ResultData(); } + + @TenantIgnore + @ApiOperation("后置设置金额") + @PostMapping("setPrice") + public ResultData setPrice(@RequestBody WxCoupon wxCoupon) { + TenantEntity tenantEntity = getTenantInfo(); + wxCoupon.updateTenantInfo(tenantEntity); + WxCoupon coupon = wxCouponService.findById(wxCoupon); + if (null == coupon ) { + return new ResultData(ResultData.ERROR, "券未查询到。"+wxCoupon.getId()); + } + if (EnumYesOrNo.YES.getCode() != coupon.getIsAfterSetPrice()) { + return new ResultData(ResultData.ERROR, "当前不是后置类型,不能设置。"+wxCoupon.getId()); + } + if (null != coupon.getPrice() && coupon.getPrice() > 0 ) { + return new ResultData(ResultData.ERROR, "当前已设置面额,不能设置。"+wxCoupon.getId()); + } + if (EnumCouponSubsidyType.WECHAT_COUPON.getCode().equals(coupon.getSubsidyType())) { + // 微信 立减 + if (coupon.getSubsidyNum() > coupon.getSalePrice()) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于售价"); + } + } else if (EnumCouponSubsidyType.OFFLINE_SUBSIDY.getCode().equals(coupon.getSubsidyType())) { + // 线下补贴 + int subsidy_num = wxCoupon.getPrice() - coupon.getSalePrice(); + if (coupon.getSubsidyNum() > subsidy_num) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于面额与售价的差值"); + } + } + ResultData resultData = wxCouponService.setPrice(wxCoupon); + return resultData; + } + @ApiOperation("根据id删除接口") @GetMapping("/del") diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023021400001__card.sql b/mallinkAdmin/src/main/resources/db/migration/V2023021400001__card.sql new file mode 100644 index 000000000..48b4229f2 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2023021400001__card.sql @@ -0,0 +1,105 @@ +alter table wx_coupon_0 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_1 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_2 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_3 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_4 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_5 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_6 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_7 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_8 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_9 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_10 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_11 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_12 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_13 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_14 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_15 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_16 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_17 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_18 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_19 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_20 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_21 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_22 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_23 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_24 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_25 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_26 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_27 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_28 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_29 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_30 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_31 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_32 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_33 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_34 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_35 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_36 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_37 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_38 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_39 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_40 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_41 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_42 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_43 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_44 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_45 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_46 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_47 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_48 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_49 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_50 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_51 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_52 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_53 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_54 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_55 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_56 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_57 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_58 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_59 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_60 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_61 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_62 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_63 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_64 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_65 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_66 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_67 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_68 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_69 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_70 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_71 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_72 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_73 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_74 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_75 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_76 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_77 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_78 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_79 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_80 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_81 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_82 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_83 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_84 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_85 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_86 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_87 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_88 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_89 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_90 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_91 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_92 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_93 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_94 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_95 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_96 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_97 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_98 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; +alter table wx_coupon_99 add column is_after_set_price int(1) not null default 0 comment '是否是后置卡面额'; + +alter table wx_card_info add column coupon_password_id bigint(20) comment '卡密编码'; +alter table wx_card_info add column type int(1) not null default 0 comment '卡类型'; + + diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java index b6d526ce1..2f2b664ba 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java @@ -1,31 +1,46 @@ package com.iformall.controller; import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.vo.WxCardSpendVo; +import com.iformall.enums.EnumCouponStatus; +import com.iformall.enums.EnumCreditLockedStatus; +import com.iformall.enums.EnumMerchantStatus; import com.iformall.enums.EnumMerchantSubsidySource; +import com.iformall.enums.EnumPayWay; +import com.iformall.exception.MallinkException; +import com.iformall.service.WxCUserBasicInfoService; +import com.iformall.service.WxCardInfoService; import com.iformall.service.WxCardSpendService; +import com.iformall.service.WxCouponOrderService; +import com.iformall.service.WxCouponPasswordService; +import com.iformall.service.WxCouponService; import com.iformall.service.WxMerchantService; import com.iformall.service.WxOrderService; +import com.iformall.utils.Constant; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; - +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; +import javax.servlet.http.HttpServletRequest; /** * @author Stormeye Wu wuguoqiang@iformall.com */ @RestController -@Api(description = "C端扫B端商户码储值卡支付") +@Api(description = "储值卡支付") @RequestMapping("/api/cardPay") public class WxCardPayController extends BaseController { @@ -39,6 +54,21 @@ public class WxCardPayController extends BaseController { @Autowired WxCardSpendService wxCardSpendService; + + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + WxCardInfoService wxCardInfoService; + + @Autowired + WxCouponOrderService wxCouponOrderService; + + @Autowired + WxCouponPasswordService wxCouponPassword; + + @Autowired + WxCouponService wxCouponService; @ApiOperation("C端扫B端储值卡交易流水(消费记录 + 补贴)列表接口") @GetMapping("list") @@ -76,4 +106,158 @@ public class WxCardPayController extends BaseController { final List> mapList = wxCardSpendService.sumCardSpendForMerchant(wxCardSpend); return new ResultData(mapList); } + + @ApiOperation(value = "微信B端扫C端电子储值卡支付订单", notes = "params:{\"cardId\":\"String\",\"cUserId\":\"String\",\"totalFee\":\"String(元)\"}") + @PostMapping("order_create_ecard") + public ResultData saveECardCardPayOrder(@RequestBody Map paramMap, HttpServletRequest request) { + String cardIdStr = paramMap.get("cardId"); + String cUserIdStr = paramMap.get("cUserId"); + if (StringUtils.isBlank(cUserIdStr) || cUserIdStr.equalsIgnoreCase(Constant.UNDEFINED)) { + logger.error("cUserId不能为空"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cUserId不能为空"); + } + if (StringUtils.isBlank(cardIdStr) || cardIdStr.equalsIgnoreCase(Constant.UNDEFINED)) { + logger.error("cardId不能为空"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardId不能为空"); + } + Long cUserId = null; + try { + cUserId = Long.valueOf(cUserIdStr); + } catch (Exception e) { + logger.error("cardId convert failed:" + cardIdStr); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardIdStr转换失败"); + } + String totalFeeStr = paramMap.get("totalFee"); + WxMerchantBUser merchantBUser = getLoginBUser(); + Long cardId = null; + try { + cardId = Long.valueOf(cardIdStr); + } catch (Exception e) { + logger.error("cardId convert failed:" + cardIdStr); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardIdStr转换失败"); + } + + WxCardInfo cardInfo = wxCardInfoService.getById(cardId); + if(cardInfo == null) { + logger.error("卡不存在: " + cardIdStr); + return new ResultData(ErrorCode.CARD_IS_NOT_FOUND); + } + + return saveCardPayOrder(cUserId,cardInfo,merchantBUser,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); + } + + private ResultData saveCardPayOrder(Long cUserId,WxCardInfo cardInfo,WxMerchantBUser merchantBUser,String totalFeeStr,EnumPayWay payWay) { + String ipStr = getIpAddr(); + if (Constant.defaultCUserId != cUserId) { + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(cUserId,merchantBUser.getFinalTenantId()); + if (null != wxCUserBasicInfo && EnumCreditLockedStatus.CLOSE.getCode().equals(wxCUserBasicInfo.getStatus())) { + logger.error(ErrorCode.MEMBER_IS_LOCKED.getMessage()); + return new ResultData(ErrorCode.MEMBER_IS_LOCKED); + } + } + if (StringUtils.isBlank(totalFeeStr) || totalFeeStr.equalsIgnoreCase(Constant.UNDEFINED)) { + logger.error("totalFee不能为空"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "totalFee不能为空"); + } + + BigDecimal totalFee = new BigDecimal(totalFeeStr); + totalFee.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) + Integer payment = totalFee.multiply(new BigDecimal(100)).intValue(); + + + Long merchantId = null; + + if(payment > cardInfo.getRemainingAmount()) { + logger.error("卡余额不足: " + cardInfo.getId()); + return new ResultData(ErrorCode.CARD_REMAIN_AMOUNT_IS_NOT_ENOUGH); + } + + //查看所有者与扫码者是否为一致 + WxCouponOrder couponOrder = wxCouponOrderService.getById(cardInfo.getId(),cardInfo.getTenantId()); + if (!couponOrder.getOwnerId().equals(cUserId)) { + logger.error("卡已被领取: " + cardInfo.getId()); + return new ResultData(ErrorCode.CARD_TRANSFERED); + } + + WxCouponMerchant couponMerchant = wxCardSpendService.checkMerchantInCoupon(cardInfo, merchantId); + if(couponMerchant == null) { + logger.error("商户不支持此卡 " + cardInfo.getId()); + return new ResultData(ErrorCode.COUPON_ORDER_MERANT_IS_NULL.getCode(), "商户不支持此卡"); + } + + WxMerchant merchant = wxMerchantService.getById(merchantId); + if (merchant.getStatus() == EnumMerchantStatus.NOT_VALID.getCode()) { + logger.error("商户已禁用, merchantId: " + merchant.getId()); + return new ResultData(ErrorCode.MERCHANT_INFO_NOT_VALID); + } + + WxOrder order = null; + try { + order = wxOrderService.saveCardPayOrder(merchant, cUserId, totalFeeStr, payment,payWay); + } catch (MallinkException e) { + logger.error("saveCardPayOrder 1" + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("saveCardPayOrder 2" + e.getMessage()); + return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage()); + } + + WxCardSpend record = new WxCardSpend(); + record.updateTenantInfo(merchant); + record.setCardId(cardInfo.getId()); + record.setOwnerId(cUserId); + record.setMerchantId(merchantId); + record.setOrderId(order.getId()); + record.setIp(ipStr); + record.setDeductionAmount(payment); + record.setRemark("操作于["+payWay.getMessage()+"("+payWay.getCode()+")]"); + + try { + return wxCardSpendService.createCardSpend(record, order, couponMerchant,payWay); + } catch (MallinkException e) { + logger.error("card spend error, req 2: " + record.toString() + ", e:" + e.getMessage()); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error("card spend error, req 3: " + record.toString() + ", e:" + e.getMessage()); + return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); + } + } + + @ApiOperation(value = "微信B端扫C端实体储值卡支付订单", notes = "params:{\"cardId\":\"String\",\"totalFee\":\"String(元)\"}") + @PostMapping("order_create_card") + public ResultData saveCardPayOrder(@RequestBody Map paramMap, HttpServletRequest request) { + String cardIdStr = paramMap.get("cardId"); + String totalFeeStr = paramMap.get("totalFee"); + if (StringUtils.isBlank(cardIdStr) || cardIdStr.equalsIgnoreCase(Constant.UNDEFINED)) { + logger.error("cardId不能为空"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardId不能为空"); + } + Long cardId = null; + try { + cardId = Long.valueOf(cardIdStr); + } catch (Exception e) { + logger.error("cardId convert failed:" + cardIdStr); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardIdStr转换失败"); + } + + WxMerchantBUser merchantBUser = getLoginBUser(); + + WxCouponPassword couponPassword = wxCouponPassword.getById(cardId); + if (null == couponPassword) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "卡未查询到"); + } + + WxCoupon coupon = wxCouponService.getById(couponPassword.getCouponId(),couponPassword.getTenantId()); + if (coupon == null) { + return new ResultData(ErrorCode.COUPON_IS_EMPTY); + } + if (coupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) { + logger.error("此券已作废:" + coupon.getId()); + return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF); + } + + WxCardInfo carInfo = wxCardInfoService.cardCreateByOffline(couponPassword, coupon); + return saveCardPayOrder(Constant.defaultCUserId,carInfo,merchantBUser,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); + } + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java index b543d3cde..fd8f5dedc 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java @@ -22,7 +22,12 @@ public class WxCardInfo extends TenantEntity { @Excel(name = "卡号", width = 20, orderNum = "1") @io.swagger.annotations.ApiModelProperty(value="主键ID-与coupon_order_id一致",name="id") protected Long id; - + @io.swagger.annotations.ApiModelProperty(value="卡密编码",name="couponPasswordId") + protected Long couponPasswordId; + @TableField(exist = false) + protected Long couponPasswordIdLike; + @io.swagger.annotations.ApiModelProperty(value="卡类型EnumCardInfoType",name="type") + protected Integer type; @io.swagger.annotations.ApiModelProperty(value = "券ID", name = "couponId") private Long couponId; @io.swagger.annotations.ApiModelProperty(value="微信订单号-购买类储值卡时的订单号",name="transactionId") @@ -35,12 +40,10 @@ public class WxCardInfo extends TenantEntity { public String getRemainingAmountStr() { return new BigDecimal(remainingAmount == null ? 0 : remainingAmount).divide(new BigDecimal(100)).toPlainString(); } - @Excel(name = "余额(元)", width = 20, orderNum = "7") @TableField(exist = false) private String remainingAmountStr; - @io.swagger.annotations.ApiModelProperty(value="剩余面额",name="remainingAmount") private Integer remainingAmount; @io.swagger.annotations.ApiModelProperty(value="分账总手续费",name="serviceFeeAmount") @@ -51,24 +54,19 @@ public class WxCardInfo extends TenantEntity { private Integer remainingShareFeeAmount; @io.swagger.annotations.ApiModelProperty(value="分账通道费差(购买时刻的通道费差,分账完结时使用)",name="rateAmount") private Integer rateAmount; - @Excel(name = "购买时间 ", width = 20, orderNum = "10", format = "yyyy-MM-dd HH:mm:ss") @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") private Date createDate; @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; - @io.swagger.annotations.ApiModelProperty(value = "是否支持转送(0:不支持,1支持)", name = "supportTransfer") private Integer supportTransfer; - @TableField(exist = false) @io.swagger.annotations.ApiModelProperty(value="查询-开始时间",name="startdate") protected Date startdate; - @TableField(exist = false) @io.swagger.annotations.ApiModelProperty(value="查询-结束时间",name="enddate") protected Date enddate; - @TableField(exist = false) private List couponIdList; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java index 36cc5f6c3..10a618c2b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java @@ -395,6 +395,9 @@ public class WxCoupon extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "是否删除1是0否", name = "isDel") private Integer isDel; + @io.swagger.annotations.ApiModelProperty(value = "是否后置面额1是0否,EnumYesOrNo", name = "isAfterSetPrice") + private Integer isAfterSetPrice; + @TableField(exist = false) private Long[] merchantIds; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCardInfoType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCardInfoType.java new file mode 100644 index 000000000..6777b3e28 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCardInfoType.java @@ -0,0 +1,36 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2018/08/09. + */ +public enum EnumCardInfoType { + + ECARD(0, "电子卡"), + CARD(1, "实体卡") + ; + + public static EnumCardInfoType getEnum(Integer code) { + for (EnumCardInfoType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumCardInfoType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java index 6b99f6986..867dd7bce 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java @@ -9,8 +9,9 @@ public enum EnumCouponPasswordStatus { INIT(0, "初始"), MSG_SENDING(1, "消息发送中"), MSG_SENDED(2, "消息已发送"), - USED(3, "已使用"), - CANCEL(4, "已作废"); + USED(3, "已兑换"), + CANCEL(4, "已作废"), + PAID(5, "已支付过"),; public static EnumCouponPasswordStatus getEnum(Integer code) { for (EnumCouponPasswordStatus value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java index bf82d42d3..8a8e1230a 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponSendType.java @@ -8,7 +8,7 @@ public enum EnumCouponSendType { // 1:主动领取 2:定向投放 ACTIVE(1,"主动领取"), PASSIVE(2, "定向投放"), - GIFT(3, "礼包券") + GIFT(3, "主券主动领取,子券自动发,如礼包子券") ; public static EnumCouponSendType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java index 64d4a47cc..e7132e3d3 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponMapper.java @@ -42,6 +42,8 @@ public interface WxCouponMapper extends CommonMapper { void deleteById(@Param("id")Long id,@Param("tenantId")String tenantId); + Integer setPrice(@Param("id")Long id,@Param("tenantId")String tenantId,@Param("price")Integer price); + Integer reduceInventory(@Param("id")Long id,@Param("tenantId")String tenantId,@Param("number")Integer number); diff --git a/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java b/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java index 711e4be3f..7d8a25677 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java @@ -2,6 +2,8 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxCardInfo; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxCouponPassword; import com.iformall.domain.vo.WxCardVo; import javax.servlet.http.HttpServletRequest; @@ -33,6 +35,8 @@ public interface WxCardInfoService { * @param record */ void saveOrUpdate(WxCardInfo record); + + WxCardInfo cardCreateByOffline(WxCouponPassword couponPassword,WxCoupon coupon); /** * 根据Id删除实体 diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java index 9d689beb9..54c3aa80c 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java @@ -93,6 +93,8 @@ public interface WxCouponService { * @param record */ ResultData saveOrUpdate(WxCoupon record); + + ResultData setPrice(WxCoupon record); ResultData updateTtProduct(WxCoupon wxCoupon); /** diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java index a1100fc7a..60220c96e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java @@ -4,17 +4,29 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.po.WxCardInfo; +import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxCouponChannel; +import com.iformall.domain.po.WxCouponPassword; import com.iformall.domain.vo.WxCardVo; +import com.iformall.enums.EnumCardInfoType; +import com.iformall.enums.EnumCouponPasswordStatus; +import com.iformall.enums.EnumCouponPasswordSupport; import com.iformall.mapper.WxCardInfoMapper; import com.iformall.mapper.WxCouponChannelMapper; +import com.iformall.mapper.WxCouponPasswordMapper; import com.iformall.service.ExcelService; import com.iformall.service.WxCardInfoService; +import com.iformall.utils.RedisLock; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import java.util.Date; import java.util.List; @Service @@ -28,6 +40,12 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { @Autowired WxCouponChannelMapper wxCouponChannelMapper; + + @Autowired + RedisLock redisLock; + + @Autowired + WxCouponPasswordMapper couponPasswordMapper; @Override public PageInfo listAsPage(WxCardVo record, Integer pageIndex, Integer pageSize) { @@ -80,4 +98,44 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { } } + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + @Override + public WxCardInfo cardCreateByOffline(WxCouponPassword couponPassword,WxCoupon coupon) { + //如果没有卡,则直接创建一个 + WxCardInfo cardInfo = this.getById(couponPassword.getId()); + if (null == cardInfo) { + long time = System.currentTimeMillis() + RedisLock.TIMEOUT; + String timeStr = String.valueOf(time); + boolean stocksetlock = redisLock.lock("cardInfoLockSet_"+couponPassword.getId(), timeStr); + if (stocksetlock) { + cardInfo = new WxCardInfo(); + cardInfo.setId(couponPassword.getId()); + cardInfo.updateTenantInfo(couponPassword); + cardInfo.setCouponId(couponPassword.getCouponId()); + cardInfo.setAmount(coupon.getPrice()); + cardInfo.setSaleAmount(coupon.getSalePrice()); + cardInfo.setCouponPasswordId(couponPassword.getId()); + cardInfo.setRemainingAmount(coupon.getPrice()); + cardInfo.setShareFeeAmount(0); + cardInfo.setRemainingShareFeeAmount(0); + cardInfo.setRateAmount(0); + cardInfo.setType(EnumCardInfoType.CARD.getCode()); + if (coupon.getPasswordSupport().equals(EnumCouponPasswordSupport.SUPPORTED.getCode())) { + WxCouponPassword updateCPwd = new WxCouponPassword(); + updateCPwd.setId(couponPassword.getId()); + updateCPwd.setCardId(cardInfo.getId()); + updateCPwd.setStatus(EnumCouponPasswordStatus.USED.getCode()); + couponPasswordMapper.updateById(updateCPwd); + } + cardInfo.setServiceFeeAmount(0); + cardInfo.setCreateDate(new Date()); + cardInfo.setUpdateDate(new Date()); + cardInfo.setSupportTransfer(coupon.getSupportTransfer()); + wxCardInfoMapper.insert(cardInfo); + } + redisLock.unlock("cardInfoLockSet_"+couponPassword.getId(), timeStr); + } + return cardInfo; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java index 66794bf33..943addd3a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java @@ -16,6 +16,7 @@ import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.*; +import com.iformall.utils.Constant; import com.iformall.utils.PayUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -304,37 +305,38 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { } // } - // 成长值 - try { - orderUpdate.setPayment(real_payment); - wxScoreRulesService.addScore2(coupon,EnumScoreType.CONSUMPTION, orderUpdate, coupon.getBusiness()); - } catch (Exception e) { - logger.error("成长值:" + e.getMessage()); + if (null != orderUpdate.getCUserId() && Constant.defaultCUserId != orderUpdate.getCUserId()) { + // 成长值 + try { + orderUpdate.setPayment(real_payment); + wxScoreRulesService.addScore2(coupon,EnumScoreType.CONSUMPTION, orderUpdate, coupon.getBusiness()); + } catch (Exception e) { + logger.error("成长值:" + e.getMessage()); + } + + // 积分 + try { + //-------此处为【现金支付】记录增加积分操作------- + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setOperatorType(EnumUserType.CUSERBASIC.getCode()); + creditHistory.setOperatorId(record.getOwnerId()); + creditHistory.setCUserId(record.getOwnerId()); + creditHistory.setCreateDate(new Date()); + // creditHistory.updateTenantInfo(record); + creditHistory.setTenantId(record.getFinalTenantId()); + creditHistory.setFinalTenantId(record.getFinalTenantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setBusinessId(coupon.getBusiness()); + creditHistory.setSpend(real_payment); + //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 + creditHistory.setMerchantId(record.getMerchantId()); + WxMerchant wxMerchant = wxMerchantMapper.selectById(record.getMerchantId()); + creditHistory.setChangePurpose("卡消费:消费商户["+wxMerchant.getName()+"] 金额["+creditHistory.getSpendStr()+"元]"); + wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); + } catch (Exception e) { + logger.error("积分值:" + e.getMessage()); + } } - - // 积分 - try { - //-------此处为【现金支付】记录增加积分操作------- - WxCreditHistory creditHistory = new WxCreditHistory(); - creditHistory.setOperatorType(EnumUserType.CUSERBASIC.getCode()); - creditHistory.setOperatorId(record.getOwnerId()); - creditHistory.setCUserId(record.getOwnerId()); - creditHistory.setCreateDate(new Date()); -// creditHistory.updateTenantInfo(record); - creditHistory.setTenantId(record.getFinalTenantId()); - creditHistory.setFinalTenantId(record.getFinalTenantId()); - creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); - creditHistory.setBusinessId(coupon.getBusiness()); - creditHistory.setSpend(real_payment); - //如果券与商户一对一 则直接将消费商户更新为此商户 若一对多 则消费商户显示多商户 - creditHistory.setMerchantId(record.getMerchantId()); - WxMerchant wxMerchant = wxMerchantMapper.selectById(record.getMerchantId()); - creditHistory.setChangePurpose("卡消费:消费商户["+wxMerchant.getName()+"] 金额["+creditHistory.getSpendStr()+"元]"); - wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); - } catch (Exception e) { - logger.error("积分值:" + e.getMessage()); - } - return new ResultData(record); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java index 963fbcc50..404e415cb 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java @@ -496,16 +496,20 @@ public class WxCouponServiceImpl implements WxCouponService { record.setSubsidyNum(0); } if (EnumCouponSubsidyType.WECHAT_COUPON.getCode().equals(record.getSubsidyType())) { - // 微信 立减 - if (record.getSubsidyNum() > record.getSalePrice()) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于售价"); - } + if (EnumYesOrNo.YES.getCode() != record.getIsAfterSetPrice()) { + // 微信 立减 + if (record.getSubsidyNum() > record.getSalePrice()) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于售价"); + } + } } else if (EnumCouponSubsidyType.OFFLINE_SUBSIDY.getCode().equals(record.getSubsidyType())) { - // 线下补贴 - int subsidy_num = record.getPrice() - record.getSalePrice(); - if (record.getSubsidyNum() > subsidy_num) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于面额与售价的差值"); - } + if (EnumYesOrNo.YES.getCode() != record.getIsAfterSetPrice()) { + // 线下补贴 + int subsidy_num = record.getPrice() - record.getSalePrice(); + if (record.getSubsidyNum() > subsidy_num) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "补贴额大于面额与售价的差值"); + } + } } else if (EnumCouponSubsidyType.WECHAT_MCHPAY.getCode().equals(record.getSubsidyType())) { // TODO 微信转账到银行卡 @@ -1011,6 +1015,20 @@ public class WxCouponServiceImpl implements WxCouponService { return false; } + @Override + @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) + public ResultData setPrice(WxCoupon record) { + Integer count = wxCouponMapper.setPrice(record.getId(), record.getTenantId(), record.getPrice()); + if (null == count || count <= 0 ) { + return new ResultData(Result.ERROR,"设置失败"); + } + //TODO 设置卡密金额 + return new ResultData(); + } + + + + @Override public ResultData updateTtProduct(WxCoupon record) { if(EnumCouponType.getDouYinType().contains(record.getType())){ 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 70cce4adf..bc3bcea27 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -1455,6 +1455,7 @@ public class WxOrderServiceImpl implements WxOrderService { cardInfo.setCouponId(order.getProductId()); cardInfo.setAmount(coupon.getPrice()); cardInfo.setSaleAmount(coupon.getSalePrice()); + cardInfo.setCouponPasswordId(couponPasswordId); cardInfo.setRemainingAmount(coupon.getPrice()); if (!coupon.checkIsFree()) { //判断该transctionId是否已经存在,如果存在,则不添加 diff --git a/mallinkService/src/main/java/com/iformall/utils/Constant.java b/mallinkService/src/main/java/com/iformall/utils/Constant.java index bec407ae7..354969f6c 100644 --- a/mallinkService/src/main/java/com/iformall/utils/Constant.java +++ b/mallinkService/src/main/java/com/iformall/utils/Constant.java @@ -116,7 +116,11 @@ public class Constant { public static final Integer wiwideOldPlat = 0;//老平台 public static final Integer wiwideNewPlat = 1;//新平台 + //收款账号参数配置项key public static final String paymentReceicerParamApiKey = "apiKey"; public static final String paymentReceiverParamIsv = "isvModel"; + + //默认c端虚拟会员编号 + public static final Long defaultCUserId = 111111111111111111L; } diff --git a/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml index d869ab7de..d77dff2a2 100644 --- a/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml @@ -17,11 +17,11 @@ - + - `id`,`tenant_id`,`parent_tenant_id`,`coupon_id`,`transaction_id`, + `id`,`tenant_id`,`parent_tenant_id`,`coupon_id`,`coupon_password_id`,`transaction_id`, `amount`,`sale_amount`,`remaining_amount`,`service_fee_amount`, `share_fee_amount`,`remaining_share_fee_amount`, `rate_amount`, `create_date`,`update_date`,`support_transfer` @@ -71,6 +71,12 @@ and `update_date` = #{updateDate} + + and `coupon_password_id` = #{couponPasswordId} + + + and `coupon_password_id` like concat('%',#{couponPasswordIdLike},'%') + and `create_date` between #{startdate} and #{enddate} diff --git a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml index 85ae02484..cf1ce0c5d 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponMapper.xml @@ -61,6 +61,7 @@ + @@ -126,7 +127,7 @@ c.`id`,c.`tenant_id`,c.`parent_tenant_id`,c.`make_merchant_id`,c.`brand`,c.`type`,c.`cover_img`,c.`cover_picture`,c.`detail_picture`, c.`title`,c.`sub_title`,c.`item_group`,c.`sale_price`,c.`freight_price`,c.`use_price`,c.`use_limit_rule`,c.`use_limit_quantity`,c.`send_type`, c.`valid_type`,c.`valid_start_date`,c.`valid_end_date`,c.pick_start_date,c.pick_end_date,c.`valid_days`,c.`detail`,c.`price`,c.tail_price,c.orig_price,c.`unit`,c.`remain_inventory`,c.`inventory`, - c.`remark`,c.`status`,c.`create_date`,c.`update_date`,c.`business`,c.`sub_business`,c.`support_transfer`,c.`subsidy_num`,c.`subsidy_type`, + c.`remark`,c.`status`,c.`create_date`,c.`update_date`,c.`business`,c.`sub_business`,c.`support_transfer`,c.`subsidy_num`,c.`subsidy_type`,c.`is_after_set_price`, c.`press_limit_num`, c.`press_limit_hours`, c.`auto_refund`,c.`credit_price`,c.`credit_refund`,c.`put_apply_status`,c.`stock_apply_status`,c.`cancle_apply_status`, c.`conditions`,c.approval_type,c.content_type,c.source_type,c.merchant_type,c.password_support,c.gift_list,c.product_type,c.category_id,c.goods_id @@ -322,6 +323,10 @@ and JSON_CONTAINS(gift_list,json_array(#{giftList})) + + + and `is_after_set_price` = #{isAfterSetPrice} + and id in @@ -379,7 +384,7 @@ select c.id,c.type,c.cover_img,c.title,c.sub_title,c.item_group,c.sale_price,c.use_price,c.price,c.tail_price,c.orig_price,c.unit,c.detail,c.remark,c.valid_type,c.valid_start_date, - c.valid_end_date,c.pick_start_date,c.pick_end_date,c.auto_refund,c.business,c.subsidy_type,c.source_type,c.merchant_type,c.content_type,c.gift_list,c.support_transfer,c.subsidy_num - from wx_coupon c where c.id = #{id} and c.`tenant_id` = #{tenantId} + c.valid_end_date,c.pick_start_date,c.pick_end_date,c.auto_refund,c.business,c.subsidy_type,c.source_type,c.merchant_type,c.content_type,c.gift_list,c.support_transfer,c.subsidy_num, + c.is_after_set_price from wx_coupon c where c.id = #{id} and c.`tenant_id` = #{tenantId} @@ -413,7 +418,7 @@ @@ -661,6 +666,10 @@ and cc.status = 0 and cc.target_ad = #{targetAd}) + + + and c.`is_after_set_price` = #{isAfterSetPrice} + and c.id in @@ -1514,5 +1523,9 @@ update wx_coupon set make_merchant_id = #{makeMerchantId} where id = #{id} and tenant_id = #{tenantId} + + + update wx_coupon set price = #{price} where id = #{id} and tenant_id = #{tenantId} and price = 0 +