diff --git a/mallinkAdmin/src/main/resources/db/migration/V202007311200__FOR_MEMBER_ONLY_001.sql b/mallinkAdmin/src/main/resources/db/migration/V202007311200__FOR_MEMBER_ONLY_001.sql index ff6a788df..2a35750e2 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V202007311200__FOR_MEMBER_ONLY_001.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V202007311200__FOR_MEMBER_ONLY_001.sql @@ -19,3 +19,11 @@ ADD COLUMN `login_count` int(11) DEFAULT 0 COMMENT '登陆次数' AFTER `active update wx_c_user_basic_info wcubi set wcubi.login_count = (select wcu.login_count from wx_c_user wcu where wcu.id=wcubi.id); +ALTER TABLE `wx_coupon_order` +ADD COLUMN `pay_vendor` SMALLINT(3) DEFAULT NULL COMMENT '订单渠道,EnumPayWay.class'; + +UPDATE wx_coupon_order o INNER JOIN wx_pay_order po ON po.order_id = o.`id` SET o.pay_vendor = po.pay_vendor; + +ALTER TABLE `wx_card_spend` +ADD COLUMN `remark` VARCHAR(30) DEFAULT NULL COMMENT '备注'; + diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java index c637304d7..1f041d20a 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCardPayController.java @@ -1,30 +1,51 @@ package com.iformall.controller; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +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.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; -import com.iformall.domain.po.*; +import com.iformall.domain.po.WxCUser; +import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxCardInfo; +import com.iformall.domain.po.WxCardSpend; +import com.iformall.domain.po.WxCouponMerchant; +import com.iformall.domain.po.WxCouponOrder; +import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxOrder; import com.iformall.domain.vo.WxCardSpendVo; import com.iformall.enums.EnumCreditLockedStatus; import com.iformall.enums.EnumMerchantStatus; +import com.iformall.enums.EnumPayWay; import com.iformall.exception.MallinkException; -import com.iformall.service.*; +import com.iformall.service.WxCUserBasicInfoService; +import com.iformall.service.WxCardInfoService; +import com.iformall.service.WxCardSpendService; +import com.iformall.service.WxCouponOrderService; +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 javax.servlet.http.HttpServletRequest; -import java.math.BigDecimal; -import java.util.List; -import java.util.Map; /** * @author Stormeye Wu wuguoqiang@iformall.com @@ -53,27 +74,28 @@ public class WxCardPayController extends BaseController { @Autowired WxCUserBasicInfoService wxCUserBasicInfoService; - @ApiOperation(value = "C端扫B端储值卡支付订单", notes = "params:{\"cardId\":\"String\",\"merchantId\":\"String\",\"totalFee\":\"String(元)\"}") + @ApiOperation(value = "微信C端扫B端储值卡支付订单", notes = "params:{\"cardId\":\"String\",\"merchantId\":\"String\",\"totalFee\":\"String(元)\"}") @PostMapping("order_create") public ResultData saveCardPayOrder(@RequestBody Map paramMap, HttpServletRequest request) { - String ipStr = getIpAddr(); - logger.info("saveCardPayOrder: " + ipStr + " :" + paramMap.toString()); - WxCUser user = getUser(); if (!user.isBasicInfo()) { logger.error("暂未成为会员,请授权手机号"); return new ResultData(ErrorCode.USER_IS_NOT_MEMBER.getCode(), "暂未成为会员,请授权手机号"); } - WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(user.getUserId()); - if (null != wxCUserBasicInfo && EnumCreditLockedStatus.CLOSE.getCode().equals(wxCUserBasicInfo.getStatus())) { - logger.error(ErrorCode.MEMBER_IS_LOCKED.getMessage()); - return new ResultData(ErrorCode.MEMBER_IS_LOCKED); - } - String cardIdStr = paramMap.get("cardId"); String merchantStr = paramMap.get("merchantId"); String totalFeeStr = paramMap.get("totalFee"); + return saveCardPayOrder(user.getUserId(),cardIdStr,merchantStr,totalFeeStr,EnumPayWay.PAY_WAY_WECHAT); + } + private ResultData saveCardPayOrder(Long cUserId,String cardIdStr,String merchantStr,String totalFeeStr,EnumPayWay payWay) { + String ipStr = getIpAddr(); + logger.info("saveCardPayOrder: " + ipStr + " : cUserId:{} , cardIdStr:{},merchantStr:{},totalFeeStr:{}",cUserId,cardIdStr,cardIdStr,cardIdStr); + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(cUserId); + 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(cardIdStr) || cardIdStr.equalsIgnoreCase(Constant.UNDEFINED)) { logger.error("cardId不能为空"); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardId不能为空"); @@ -119,7 +141,7 @@ public class WxCardPayController extends BaseController { //查看所有者与扫码者是否为一致 WxCouponOrder couponOrder = wxCouponOrderService.getById(cardId); - if (!couponOrder.getOwnerId().equals(user.getUserId())) { + if (!couponOrder.getOwnerId().equals(cUserId)) { logger.error("卡已被领取: " + cardIdStr); return new ResultData(ErrorCode.CARD_TRANSFERED); } @@ -138,7 +160,7 @@ public class WxCardPayController extends BaseController { WxOrder order = null; try { - order = wxOrderService.saveCardPayOrder(merchant, user.getUserId(), totalFeeStr, payment); + order = wxOrderService.saveCardPayOrder(merchant, cUserId, totalFeeStr, payment,payWay); } catch (MallinkException e) { logger.error("saveCardPayOrder 1" + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); @@ -150,11 +172,12 @@ public class WxCardPayController extends BaseController { WxCardSpend record = new WxCardSpend(); record.updateTenantInfo(merchant); record.setCardId(cardId); - record.setOwnerId(user.getUserId()); + 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); @@ -166,7 +189,8 @@ public class WxCardPayController extends BaseController { return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); } } - + + @ApiOperation("C端扫B端储值卡交易流水列表接口") @GetMapping("list") @ApiImplicitParams({ @@ -180,9 +204,13 @@ public class WxCardPayController extends BaseController { logger.error("暂未成为会员,请授权手机号"); return new ResultData(ErrorCode.USER_IS_NOT_MEMBER.getCode(), "暂未成为会员,请授权手机号"); } - if (wxCardSpend == null) wxCardSpend = new WxCardSpendVo(); + return cardSpendList(wxCardSpend,user.getUserId(), pageNum, pageSize); + } + + private ResultData cardSpendList(WxCardSpendVo wxCardSpend,Long cUserId,Integer pageNum, Integer pageSize) { + if (wxCardSpend == null) wxCardSpend = new WxCardSpendVo(); wxCardSpend.updateTenantInfo(getTenantInfo()); - wxCardSpend.setOwnerId(user.getUserId()); + wxCardSpend.setOwnerId(cUserId); final PageInfo page = wxCardSpendService.listAsPage(wxCardSpend, pageNum, pageSize); return new ResultData(page); } @@ -197,9 +225,13 @@ public class WxCardPayController extends BaseController { logger.error("暂未成为会员,请授权手机号"); return new ResultData(ErrorCode.USER_IS_NOT_MEMBER.getCode(), "暂未成为会员,请授权手机号"); } - if (wxCardSpend == null) wxCardSpend = new WxCardSpendVo(); + return sumCardSpendList(wxCardSpend, user.getUserId()); + } + + private ResultData sumCardSpendList(WxCardSpendVo wxCardSpend,Long cUserId) { + if (wxCardSpend == null) wxCardSpend = new WxCardSpendVo(); wxCardSpend.updateTenantInfo(getTenantInfo()); - wxCardSpend.setOwnerId(user.getUserId()); + wxCardSpend.setOwnerId(cUserId); final List> mapList = wxCardSpendService.sumCardSpendForOwner(wxCardSpend); return new ResultData(mapList); } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCardSpend.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCardSpend.java index b444d4577..65ad8c499 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCardSpend.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCardSpend.java @@ -61,6 +61,9 @@ public class WxCardSpend extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="来源(0:C端小程序扫一扫, 1:POS支付)",name="payFrom") private Integer payFrom; + + @io.swagger.annotations.ApiModelProperty(value="说明",name="remark") + private String remark; @TableField(exist = false) @Excel(name = "消费金额(元)", width = 20, orderNum = "7") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java index 7d0887a65..3b860857e 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java @@ -42,7 +42,8 @@ public class WxCouponOrder extends TenantEntity { private Date updateDate; @io.swagger.annotations.ApiModelProperty(value = "单券实际购买价格", name = "couponPrice") private Integer couponPrice; - + @io.swagger.annotations.ApiModelProperty(value = "支付渠道EnumPayWay", name = "pay_vendor") + private Integer payVendor; @io.swagger.annotations.ApiModelProperty(value="过期退款(0:正常,1不退)",name="autoRefund") private Integer autoRefund; diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java index ba3be25f8..d27780fa7 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -1,20 +1,27 @@ package com.iformall.service; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.dto.OrderSaveDto; -import com.iformall.domain.po.*; +import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxCouponOrder; +import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxMerchantBUser; +import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.WxCouponSendVo; import com.iformall.domain.vo.WxOrderCouponPressVo; import com.iformall.domain.vo.WxOrderCouponVo; import com.iformall.domain.vo.WxOrderQueryVo; import com.iformall.enums.EnumOrderStatus; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.util.List; -import java.util.Map; +import com.iformall.enums.EnumPayWay; public interface WxOrderService { @@ -70,7 +77,7 @@ public interface WxOrderService { * @param payment * @return 订单id */ - WxOrder saveCardPayOrder(WxMerchant merchant, Long cUserId, String totalFeeStr, Integer payment); + WxOrder saveCardPayOrder(WxMerchant merchant, Long cUserId, String totalFeeStr, Integer payment,EnumPayWay payWay); /** * 免费券订单接口 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 c14720cb2..8deb116e6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -89,6 +89,7 @@ import com.iformall.enums.EnumOrderType; import com.iformall.enums.EnumPayShare; import com.iformall.enums.EnumPayStatus; import com.iformall.enums.EnumPayType; +import com.iformall.enums.EnumPayWay; import com.iformall.enums.EnumProfitSharingOrderType; import com.iformall.enums.EnumScoreType; import com.iformall.enums.EnumUserType; @@ -937,7 +938,7 @@ public class WxOrderServiceImpl implements WxOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxOrder saveCardPayOrder(WxMerchant merchant, Long cUserId, String totalFeeStr, Integer payment) { + public WxOrder saveCardPayOrder(WxMerchant merchant, Long cUserId, String totalFeeStr, Integer payment,EnumPayWay payWay) { Date curr = new Date(); final IdWorker idWorker = IdWorker.get(); @@ -945,7 +946,7 @@ public class WxOrderServiceImpl implements WxOrderService { // body // tenant_id + merchant_id + title + subtitle - String bodyStr = "C扫B储值卡支付, 金额:" + totalFeeStr; + String bodyStr = "["+payWay.getMessage()+"("+payWay.getCode()+")]C扫B储值卡支付, 金额:" + totalFeeStr; WxOrder record = new WxOrder(); record.setId(orderNumber); @@ -1054,6 +1055,7 @@ public class WxOrderServiceImpl implements WxOrderService { couponOrder.setAutoRefund(coupon.getAutoRefund()); couponOrder.setOrderId(order.getOrderNumber()); couponOrder.setExpiredTime(valid_date); + couponOrder.setPayVendor(payOrder.getPayVendor()); if (!isCard) { couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); } else { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index 2f2bc6f6f..be86f783a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -50,7 +50,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { WxAppinfoMapper wxAppinfoMapper; @Autowired - WxCUserMapper wxCUserMapper; + WxCUserBasicInfoMapper wxCUserBasicInfoMapper; @Autowired WxCUserService wxCUserService; @@ -1310,7 +1310,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); } if (order.getType().equals(EnumOrderType.COUPON.getCode())) { - WxCUser user = wxCUserMapper.selectById(order.getCUserId()); + WxCUserBasicInfo user = wxCUserBasicInfoMapper.selectById(order.getCUserId()); if (user == null) { logger.error("pay handle, order " + record.getOrderId() + " not found , payOrderid : " + record.getPayOrderNo()); throw new MallinkException(ErrorCode.USER_IS_EMPTY); @@ -1404,7 +1404,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); } if (order.getType().equals(EnumOrderType.COUPON.getCode())) { - WxCUser user = wxCUserMapper.selectById(order.getCUserId()); + WxCUserBasicInfo user = wxCUserBasicInfoMapper.selectById(order.getCUserId()); if (user == null) { logger.error("pay handle, order " + record.getOrderId() + " not found , payOrderid : " + record.getPayOrderNo()); throw new MallinkException(ErrorCode.USER_IS_EMPTY);