From f1979339ef71227149682ecfe72d6934b23c40f4 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 24 Feb 2023 15:35:51 +0800 Subject: [PATCH 1/6] fix card --- .../controller/WxCardPayController.java | 101 +++++++++--------- .../iformall/domain/vo/WxCouponOrderCVo.java | 4 +- 2 files changed, 55 insertions(+), 50 deletions(-) diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java index 1be0ade73..b65a4df72 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java @@ -113,20 +113,21 @@ public class WxCardPayController extends BaseController { 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) { + @ApiOperation(value = "微信B端扫储值卡码支付订单", notes = "params:{\"cardId\":\"String\",\"cUserId\":\"String\",\"totalFee\":\"String(元)\"}") + @PostMapping("scan_card") + public ResultData scanCard(@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不能为空"); - } + 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不能为空"); } + if (StringUtils.isBlank(totalFeeStr) || totalFeeStr.equalsIgnoreCase(Constant.UNDEFINED)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "totalFee不能为空"); + } + String _decodeCouponOrderId = WxCouponOrderCVo.getDecodeExpiredCouponOrderId(cardIdStr); if (_decodeCouponOrderId.contains(WxCouponOrderCVo.arg)) { String[] decodeids = _decodeCouponOrderId.split(WxCouponOrderCVo.arg); @@ -136,8 +137,17 @@ public class WxCardPayController extends BaseController { if (expiredtime.before(new Date())) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"码已失效,请更新二维码后重试"); } + if (StringUtils.isBlank(cUserIdStr) || cUserIdStr.equalsIgnoreCase(Constant.UNDEFINED)) { + logger.error("cUserId不能为空"); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cUserId不能为空"); + } + return saveECardCardPayOrder(cardIdStr,cUserIdStr,totalFeeStr); + }else { + return savePasswordCardPayOrder(cardIdStr,cUserIdStr,totalFeeStr); } - + } + + private ResultData saveECardCardPayOrder(String cardIdStr,String cUserIdStr,String totalFeeStr) { Long cUserId = null; try { cUserId = Long.valueOf(cUserIdStr); @@ -145,7 +155,6 @@ public class WxCardPayController extends BaseController { 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 { @@ -162,6 +171,38 @@ public class WxCardPayController extends BaseController { } return saveCardPayOrder(cUserId,cardInfo,merchantBUser,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); } + + public ResultData savePasswordCardPayOrder(String cardIdStr,String cUserIdStr,String totalFeeStr) { + 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(), "卡未查询到"); + } + if (EnumYesOrNo.YES.getCode().intValue() == couponPassword.getIsStop().intValue()) { + return new ResultData(ErrorCode.CARD_IS_NOT_FOUND.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); + } private ResultData saveCardPayOrder(Long cUserId,WxCardInfo cardInfo,WxMerchantBUser merchantBUser,String totalFeeStr,EnumPayWay payWay) { @@ -249,44 +290,6 @@ public class WxCardPayController extends BaseController { } } - @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(), "卡未查询到"); - } - if (EnumYesOrNo.YES.getCode().intValue() == couponPassword.getIsStop().intValue()) { - return new ResultData(ErrorCode.CARD_IS_NOT_FOUND.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/vo/WxCouponOrderCVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java index 850490f56..e3e8a71ca 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java @@ -174,8 +174,10 @@ public class WxCouponOrderCVo extends WxCouponOrder { if (expiredSeconds > 0 ) { sb.append(arg).append(DateUtils.date2String(DateUtils.getSecondsTimeAfter(expiredSeconds, new Date()))); return Base64Util.encode(sb.toString().getBytes()); + }else { + sb.append(arg).append(DateUtils.date2String(DateUtils.getSecondsTimeAfter(Integer.MAX_VALUE, new Date()))); + return Base64Util.encode(sb.toString().getBytes()); } - return couponOrderId; } public static String getDecodeExpiredCouponOrderId(String couponOrderId) { From c727126e4f1cd07a388ac7a297cee012ae4dd434 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 24 Feb 2023 15:37:20 +0800 Subject: [PATCH 2/6] fix card --- .../main/java/com/iformall/controller/WxCardPayController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java index b65a4df72..a0960a5ac 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java @@ -114,7 +114,7 @@ public class WxCardPayController extends BaseController { } @ApiOperation(value = "微信B端扫储值卡码支付订单", notes = "params:{\"cardId\":\"String\",\"cUserId\":\"String\",\"totalFee\":\"String(元)\"}") - @PostMapping("scan_card") + @PostMapping("scanCard") public ResultData scanCard(@RequestBody Map paramMap, HttpServletRequest request) { String cardIdStr = paramMap.get("cardId"); String cUserIdStr = paramMap.get("cUserId"); From 4406b5877fc093eb1e6fe950c20d9a08e901495a Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 24 Feb 2023 16:00:08 +0800 Subject: [PATCH 3/6] fix card --- .../com/iformall/controller/WxCardPayController.java | 9 ++++----- .../iformall/controller/WxCouponOrderController.java | 9 +++++---- .../java/com/iformall/domain/vo/WxCouponOrderCVo.java | 10 ++++++---- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java index a0960a5ac..8f8f850c8 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java @@ -113,11 +113,10 @@ public class WxCardPayController extends BaseController { return new ResultData(mapList); } - @ApiOperation(value = "微信B端扫储值卡码支付订单", notes = "params:{\"cardId\":\"String\",\"cUserId\":\"String\",\"totalFee\":\"String(元)\"}") + @ApiOperation(value = "微信B端扫储值卡码支付订单", notes = "params:{\"cardId\":\"String\",\"totalFee\":\"String(元)\"}") @PostMapping("scanCard") public ResultData scanCard(@RequestBody Map paramMap, HttpServletRequest request) { String cardIdStr = paramMap.get("cardId"); - String cUserIdStr = paramMap.get("cUserId"); String totalFeeStr = paramMap.get("totalFee"); if (StringUtils.isBlank(cardIdStr) || cardIdStr.equalsIgnoreCase(Constant.UNDEFINED)) { @@ -137,13 +136,13 @@ public class WxCardPayController extends BaseController { if (expiredtime.before(new Date())) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"码已失效,请更新二维码后重试"); } + String cUserIdStr = decodeids[2]; if (StringUtils.isBlank(cUserIdStr) || cUserIdStr.equalsIgnoreCase(Constant.UNDEFINED)) { - logger.error("cUserId不能为空"); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cUserId不能为空"); } return saveECardCardPayOrder(cardIdStr,cUserIdStr,totalFeeStr); }else { - return savePasswordCardPayOrder(cardIdStr,cUserIdStr,totalFeeStr); + return savePasswordCardPayOrder(cardIdStr,totalFeeStr); } } @@ -172,7 +171,7 @@ public class WxCardPayController extends BaseController { return saveCardPayOrder(cUserId,cardInfo,merchantBUser,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); } - public ResultData savePasswordCardPayOrder(String cardIdStr,String cUserIdStr,String totalFeeStr) { + public ResultData savePasswordCardPayOrder(String cardIdStr,String totalFeeStr) { Long cardId = null; try { cardId = Long.valueOf(cardIdStr); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index ac28d4753..1dd358acd 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -223,7 +223,7 @@ public class WxCouponOrderController extends BaseController { } Map retmap = new HashMap(); - retmap.put("dynamicId", WxCouponOrderCVo.calcuteExpiredCouponOrderId(couponOrderId,Integer.parseInt(sysConfig.getConfigItemValue()))); + retmap.put("dynamicId", WxCouponOrderCVo.calcuteExpiredCouponOrderId(couponOrderId,Integer.parseInt(sysConfig.getConfigItemValue()),null)); retmap.put("expiredSeconds", Integer.parseInt(sysConfig.getConfigItemValue())); retmap.put("couponTenantId", couponTenantId); return new ResultData(retmap); @@ -363,9 +363,10 @@ public class WxCouponOrderController extends BaseController { @GetMapping("cardDynamicId") @ApiImplicitParams({ @ApiImplicitParam(name = "cardId", value = "卡ID", dataType = "string", paramType = "query", required = true), - @ApiImplicitParam(name = "cardTenantId", value = "券tenantID", dataType = "string", paramType = "query", required = false) + @ApiImplicitParam(name = "cardTenantId", value = "券tenantID", dataType = "string", paramType = "query", required = true), + @ApiImplicitParam(name = "cUserId", value = "会员ID", dataType = "string", paramType = "query", required = true) }) - public ResultData cardDynamicId(String cardId,String cardTenantId) { + public ResultData cardDynamicId(String cardId,String cardTenantId,String cUserId) { if (StringUtils.isBlank(cardId) || cardId.equalsIgnoreCase(Constant.UNDEFINED)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); @@ -377,7 +378,7 @@ public class WxCouponOrderController extends BaseController { } Map retmap = new HashMap(); - retmap.put("dynamicId", WxCouponOrderCVo.calcuteExpiredCouponOrderId(cardId,Integer.parseInt(sysConfig.getConfigItemValue()))); + retmap.put("dynamicId", WxCouponOrderCVo.calcuteExpiredCouponOrderId(cardId,Integer.parseInt(sysConfig.getConfigItemValue()),cUserId)); retmap.put("expiredSeconds", Integer.parseInt(sysConfig.getConfigItemValue())); retmap.put("cardTenantId", cardTenantId); return new ResultData(retmap); diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java index e3e8a71ca..a86d54033 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponOrderCVo.java @@ -166,18 +166,20 @@ public class WxCouponOrderCVo extends WxCouponOrder { public static final String arg = "&"; - public static String calcuteExpiredCouponOrderId(String couponOrderId,int expiredSeconds) { + public static String calcuteExpiredCouponOrderId(String couponOrderId,int expiredSeconds,String cUserId) { if (StringUtils.isBlank(couponOrderId)) { return null; } StringBuffer sb = new StringBuffer().append(couponOrderId); if (expiredSeconds > 0 ) { sb.append(arg).append(DateUtils.date2String(DateUtils.getSecondsTimeAfter(expiredSeconds, new Date()))); - return Base64Util.encode(sb.toString().getBytes()); }else { sb.append(arg).append(DateUtils.date2String(DateUtils.getSecondsTimeAfter(Integer.MAX_VALUE, new Date()))); - return Base64Util.encode(sb.toString().getBytes()); } + if (StringUtils.isNotBlank(cUserId)) { + sb.append(arg).append(cUserId); + } + return Base64Util.encode(sb.toString().getBytes()); } public static String getDecodeExpiredCouponOrderId(String couponOrderId) { @@ -188,6 +190,6 @@ public class WxCouponOrderCVo extends WxCouponOrder { } public static void main(String[] args) { - System.out.println(calcuteExpiredCouponOrderId("632830267681071104",300)); + System.out.println(calcuteExpiredCouponOrderId("632830267681071104",300,"632830267681071104")); } } From af5eb256d24a95592308444c117322d36c017ac0 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 24 Feb 2023 16:02:41 +0800 Subject: [PATCH 4/6] fix card --- .../java/com/iformall/controller/WxCouponOrderController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index 1dd358acd..a59bfcdc2 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -368,7 +368,7 @@ public class WxCouponOrderController extends BaseController { }) public ResultData cardDynamicId(String cardId,String cardTenantId,String cUserId) { - if (StringUtils.isBlank(cardId) || cardId.equalsIgnoreCase(Constant.UNDEFINED)) { + if (StringUtils.isBlank(cardId) || cardId.equalsIgnoreCase(Constant.UNDEFINED) || StringUtils.isBlank(cUserId) || cUserId.equalsIgnoreCase(Constant.UNDEFINED) ) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } From 17da25832874c8e7105eff7e2f6ba330955e99dc Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 24 Feb 2023 16:25:17 +0800 Subject: [PATCH 5/6] fix card --- .../controller/WxCardInfoController.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 mallinkBApi/src/main/java/com/iformall/controller/WxCardInfoController.java diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCardInfoController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCardInfoController.java new file mode 100644 index 000000000..eb378f43e --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCardInfoController.java @@ -0,0 +1,69 @@ +package com.iformall.controller; + +import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxCardInfo; +import com.iformall.domain.po.WxMerchantBUser; +import com.iformall.domain.vo.WxCardSpendVo; +import com.iformall.domain.vo.WxCouponOrderCVo; +import com.iformall.exception.MallinkException; +import com.iformall.pay.WxPayConstant; +import com.iformall.service.PosBrunService; +import com.iformall.service.WxCardInfoService; +import com.iformall.utils.Constant; +import com.iformall.utils.DateUtils; + +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.util.Date; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api/cardInfo") +public class WxCardInfoController extends BaseController { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxCardInfoService wxCardInfoService; + + @ApiOperation(value = "查询卡信息") + @GetMapping("detail") + @ApiImplicitParams({ + @ApiImplicitParam(name = "dynamicId", value = "动态码ID", dataType = "String", paramType = "query", required = true)}) + public ResultData detail(String dynamicId) { + if (StringUtils.isBlank(dynamicId) || dynamicId.equalsIgnoreCase(Constant.UNDEFINED)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardId不能为空"); + } + String cardIdStr = dynamicId; + boolean isECard = false; + String _decodeCouponOrderId = WxCouponOrderCVo.getDecodeExpiredCouponOrderId(dynamicId); + if (_decodeCouponOrderId.contains(WxCouponOrderCVo.arg)) { + String[] decodeids = _decodeCouponOrderId.split(WxCouponOrderCVo.arg); + cardIdStr = decodeids[0]; + isECard = true; + } + WxCardInfo cardInfo = wxCardInfoService.getById(Long.parseLong(cardIdStr)); + if (null == cardInfo) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "未查询到卡:"+cardIdStr); + } + Map map = new HashMap(); + if (isECard) { + map.put("cardId", cardInfo.getId()); + }else { + map.put("cardId", cardInfo.getCouponPasswordId()); + } + map.put("amount", cardInfo.getAmount()); + map.put("remainAmount", cardInfo.getRemainingAmount()); + return new ResultData(map); + } +} From b9bd5e074d95a830ed41bd9055c9449f8967ea59 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Fri, 24 Feb 2023 16:27:09 +0800 Subject: [PATCH 6/6] fix card --- .../main/java/com/iformall/controller/WxCardInfoController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCardInfoController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCardInfoController.java index eb378f43e..28eb93ad3 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCardInfoController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCardInfoController.java @@ -64,6 +64,7 @@ public class WxCardInfoController extends BaseController { } map.put("amount", cardInfo.getAmount()); map.put("remainAmount", cardInfo.getRemainingAmount()); + map.put("cardType", cardInfo.getType()); return new ResultData(map); } }