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..28eb93ad3 --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCardInfoController.java @@ -0,0 +1,70 @@ +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()); + map.put("cardType", cardInfo.getType()); + return new ResultData(map); + } +} diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java index 1be0ade73..8f8f850c8 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java @@ -113,20 +113,20 @@ 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\",\"totalFee\":\"String(元)\"}") + @PostMapping("scanCard") + 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 +136,17 @@ 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)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cUserId不能为空"); + } + return saveECardCardPayOrder(cardIdStr,cUserIdStr,totalFeeStr); + }else { + return savePasswordCardPayOrder(cardIdStr,totalFeeStr); } - + } + + private ResultData saveECardCardPayOrder(String cardIdStr,String cUserIdStr,String totalFeeStr) { Long cUserId = null; try { cUserId = Long.valueOf(cUserIdStr); @@ -145,7 +154,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 +170,38 @@ public class WxCardPayController extends BaseController { } return saveCardPayOrder(cUserId,cardInfo,merchantBUser,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); } + + public ResultData savePasswordCardPayOrder(String cardIdStr,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 +289,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/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index ac28d4753..a59bfcdc2 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,11 +363,12 @@ 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)) { + if (StringUtils.isBlank(cardId) || cardId.equalsIgnoreCase(Constant.UNDEFINED) || StringUtils.isBlank(cUserId) || cUserId.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 850490f56..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,16 +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 couponOrderId; + if (StringUtils.isNotBlank(cUserId)) { + sb.append(arg).append(cUserId); + } + return Base64Util.encode(sb.toString().getBytes()); } public static String getDecodeExpiredCouponOrderId(String couponOrderId) { @@ -186,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")); } }