Просмотр исходного кода

[卡转赠][修改][领取功能]

release_toaliyun_real
gongbiao 7 лет назад
Родитель
Сommit
11b10daa06
9 измененных файлов: 302 добавлений и 11 удалений
  1. +28
    -4
      mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java
  2. +2
    -0
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java
  3. +155
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxCardTransferInfo.java
  4. +2
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java
  5. +9
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxCardTransferInfoMapper.java
  6. +9
    -5
      mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java
  7. +73
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java
  8. +5
    -0
      mallinkService/src/main/resources/mapper/WxCardTransferInfoMapper.xml
  9. +19
    -1
      mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml

+ 28
- 4
mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java Просмотреть файл

@@ -16,10 +16,7 @@ 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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.HashMap;
@@ -137,4 +134,31 @@ public class WxCouponOrderController extends BaseController {

return wxCouponOrderService.cardDetailCUserVo(getUserId(), couponOrderId);
}

@ApiOperation(value = "卡转赠领取")
@PostMapping("cardAccept")
public ResultData cardAccept(@ModelAttribute WxCouponOrder wxCouponOrder) {

//coupon_order_id判断
Long id = wxCouponOrder.getId();
if (id == null) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
}
//转赠人判断
if (wxCouponOrder.getCUserId() == null) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
}
//当前领取人
wxCouponOrder.setOwnerId(getUserId());
//转赠者与当前领取人是否为同一个
if (wxCouponOrder.getCUserId().equals(wxCouponOrder.getOwnerId())) {
logger.info("转赠人与卡所有者相同");
return new ResultData(ErrorCode.CARD_TRANSFER_INVALID.getCode(), "转赠人与卡所有者相同");
}

return wxCouponOrderService.cardAccept(wxCouponOrder);

}


}

+ 2
- 0
mallinkService/src/main/java/com/iformall/common/ErrorCode.java Просмотреть файл

@@ -166,6 +166,8 @@ public enum ErrorCode{
CARD_IS_NOT_FOUND(9001, "优惠卡不存在"),
CARD_REMAIN_AMOUNT_IS_NOT_ENOUGH(9002, "优惠卡余额不足"),
CARD_IS_NOT_COST(9003, "优惠卡未消费,退款请用卡券退款,钱直接退回购买人手里"),
CARD_TRANSFERED(9004, "消费卡已被转赠"),
CARD_TRANSFER_INVALID(9005, "消费卡转赠已失效"),

/**
* 卡消费


+ 155
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxCardTransferInfo.java Просмотреть файл

@@ -0,0 +1,155 @@
package com.iformall.domain.po;

import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

@Table(name = "wx_card_transfer_info")
public class WxCardTransferInfo implements Serializable {
private static final long serialVersionUID = 1L;

@Id
protected Long id;

@Transient
protected List<Long> ids;
@Transient
protected String sortColumns;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getSortColumns() {
return sortColumns;
}

public List<Long> getIds() {
return ids;
}

public void setIds(List<Long> ids) {
this.ids = ids;
}


//保存到转赠表中 id,coupon_order_id,tenant_id,title,amount,remain_amount,from_user,to_user,status,create_date,update_date

@io.swagger.annotations.ApiModelProperty(value = "卡与订单关联ID", name = "couponOrderId")
private Long couponOrderId;

@io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId")
private String tenantId;

@io.swagger.annotations.ApiModelProperty(value = "卡名称", name = "title")
private String title;

@io.swagger.annotations.ApiModelProperty(value = "面额", name = "amount")
private Integer amount;

@io.swagger.annotations.ApiModelProperty(value = "余额", name = "remainAmount")
private Integer remainAmount;

@io.swagger.annotations.ApiModelProperty(value = "转赠者", name = "fromUser")
private Long fromUser;

@io.swagger.annotations.ApiModelProperty(value = "领取者", name = "toUser")
private Long toUser;

@io.swagger.annotations.ApiModelProperty(value = "状态", name = "status")
private Integer status;

@io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createDate")
private Date createDate;

@io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "updateDate")
private Date updateDate;


public Long getCouponOrderId() {
return couponOrderId;
}

public void setCouponOrderId(Long couponOrderId) {
this.couponOrderId = couponOrderId;
}

public String getTenantId() {
return tenantId;
}

public void setTenantId(String tenantId) {
this.tenantId = tenantId;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public Integer getAmount() {
return amount;
}

public void setAmount(Integer amount) {
this.amount = amount;
}

public Integer getRemainAmount() {
return remainAmount;
}

public void setRemainAmount(Integer remainAmount) {
this.remainAmount = remainAmount;
}

public Long getFromUser() {
return fromUser;
}

public void setFromUser(Long fromUser) {
this.fromUser = fromUser;
}

public Long getToUser() {
return toUser;
}

public void setToUser(Long toUser) {
this.toUser = toUser;
}

public Integer getStatus() {
return status;
}

public void setStatus(Integer status) {
this.status = status;
}

public Date getCreateDate() {
return createDate;
}

public void setCreateDate(Date createDate) {
this.createDate = createDate;
}

public Date getUpdateDate() {
return updateDate;
}

public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
}

+ 2
- 1
mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java Просмотреть файл

@@ -13,7 +13,8 @@ public enum EnumCouponOrderStatus {
CARD_USING(4, "使用中"),
CARD_OVER_TIME(5, "已过期"),
CARD_COMPLETE(6, "已用完"),
CARD_RETURNED(7, "已线下退款")
CARD_RETURNED(7, "已线下退款"),
CARD_TRANSFER(8, "已转赠")
;

public static EnumCouponOrderStatus getEnum(Integer code) {


+ 9
- 0
mallinkService/src/main/java/com/iformall/mapper/WxCardTransferInfoMapper.java Просмотреть файл

@@ -0,0 +1,9 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxCardTransferInfo;

public interface WxCardTransferInfoMapper extends CommonMapper<WxCardTransferInfo, Long> {


}

+ 9
- 5
mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java Просмотреть файл

@@ -4,14 +4,15 @@ import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCouponOrder;
import com.iformall.domain.po.WxMerchantBUser;
import com.iformall.domain.po.WxOrder;
import com.iformall.domain.vo.*;

import java.util.Date;
import java.util.List;
import com.iformall.domain.vo.CUserDateAmountVo;
import com.iformall.domain.vo.WxCardCVo;
import com.iformall.domain.vo.WxCouponOrderBVo;
import com.iformall.domain.vo.WxCouponOrderCarCVo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;

public interface WxCouponOrderService {

@@ -178,4 +179,7 @@ public interface WxCouponOrderService {
* @param ownerId C端用户
*/
ResultData cardDetailCUserVo(Long ownerId, String couponOrderId);

ResultData cardAccept(WxCouponOrder wxCouponOrder);

}

+ 73
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java Просмотреть файл

@@ -11,6 +11,7 @@ import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.dto.WxSharingOrderDto;
import com.iformall.domain.po.*;
@@ -90,6 +91,12 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
@Autowired
WxPayAccountMapper wxPayAccountMapper;

@Autowired
WxCardInfoMapper wxCardInfoMapper;

@Autowired
WxCardTransferInfoMapper wxCardTransferInfoMapper;

@Override
public PageInfo<WxCouponOrder> listAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponOrderMapper.findList(record));
@@ -686,4 +693,70 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
return new ResultData(cardCVo);
}

@Transactional(rollbackFor = Exception.class)
@Override
public ResultData cardAccept(WxCouponOrder record) {
//卡券是否存在
WxCardCVo cardCVo = wxCouponOrderMapper.findCardDetailOfCUser(record.getId());
if (cardCVo == null) {
logger.info("卡券不存在" + record.getId());
return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL);
}
//转赠人是否存在
Long cUserId = record.getCUserId();
WxCUser wxCuser = wxCUserMapper.selectByPrimaryKey(cUserId);
if (wxCuser == null) {
logger.info("转赠人不存在:" + cUserId);
return new ResultData(ErrorCode.USER_IS_EMPTY.getCode(), "转赠人不存在");
}

//判断转赠人与目前卡所有者是否为同一个
//数据表中当前卡所有者
Long ownerId = cardCVo.getOwnerId();
if (!ownerId.equals(cUserId)) {
logger.info("转赠人与目前卡所有者不相同," + "转赠人:" + cUserId + ",当前所有者:" + ownerId);
return new ResultData(ErrorCode.CARD_TRANSFERED);
}
//判断卡是否已消费
//面额与余额是否相同
if (!cardCVo.getAmount().equals(cardCVo.getRemainingAmount())) {
logger.info("面额与余额不相同");
return new ResultData(ErrorCode.CARD_TRANSFER_INVALID);
}
//保存到转赠表中 id,coupon_order_id,tenant_id,title,amount,remain_amount,from_user,to_user,status,create_date,update_date
try {
saveCardTransfer(record, cardCVo);
} catch (Exception e) {
logger.info("保存卡转赠信息失败");
throw new MallinkException(ErrorCode.CARD_TRANSFER_INVALID);
}
//更新卡拥有者
try {
wxCouponOrderMapper.updateByPrimaryKeySelective(record);
} catch (Exception e) {
logger.info("更新卡拥有者信息失败");
throw new MallinkException(ErrorCode.CARD_TRANSFER_INVALID);
}
return new ResultData(Result.SUCCESS, "领取成功");
}

public void saveCardTransfer(WxCouponOrder couponOrder, WxCardCVo cardCVo) {
logger.info("保存卡转赠信息");
WxCardTransferInfo wxCardTransferInfo = new WxCardTransferInfo();
final IdWorker idWorker = IdWorker.get();
wxCardTransferInfo.setId(idWorker.nextId());
wxCardTransferInfo.setTenantId(cardCVo.getTenantId());
wxCardTransferInfo.setCouponOrderId(couponOrder.getId());
wxCardTransferInfo.setFromUser(couponOrder.getCUserId());
wxCardTransferInfo.setToUser(couponOrder.getOwnerId());
wxCardTransferInfo.setAmount(cardCVo.getAmount());
wxCardTransferInfo.setRemainAmount(cardCVo.getRemainingAmount());
wxCardTransferInfo.setStatus(EnumCouponOrderStatus.CARD_TRANSFER.getCode());
wxCardTransferInfo.setTitle(cardCVo.getTitle());
Date date = new Date();
wxCardTransferInfo.setCreateDate(date);
wxCardTransferInfo.setUpdateDate(date);
wxCardTransferInfoMapper.insertSelective(wxCardTransferInfo);
}

}

+ 5
- 0
mallinkService/src/main/resources/mapper/WxCardTransferInfoMapper.xml Просмотреть файл

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxCardTransferInfoMapper">

</mapper>

+ 19
- 1
mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml Просмотреть файл

@@ -659,11 +659,29 @@
<sql id="allCUserCardDetailColumns">
co.id,co.tenant_id,co.coupon_id,co.coupon_type,co.c_user_id,co.owner_id,co.b_user_id,co.order_id,co.expired_time,co.coupon_order_status,co.create_date,co.update_date,co.coupon_price,
c.cover_img,c.title,c.sub_title,c.sale_price,c.price,c.unit,c.detail,c.remark,
a.amount,a.remaining_amount
a.amount,a.remaining_amount,c.support_transfer
</sql>


<select id="findCardListOfCUser" parameterType="com.iformall.domain.vo.WxCardCVo" resultMap="CCardVoResultMap">
select id,tenant_id,coupon_id,coupon_type,expired_time,coupon_order_status,create_date,update_date,
cover_img,title,sub_title,detail,unit,remark,amount,remaining_amount,support_transfer
from wx_card_transfer_info where 1=1
<if test="tenantId != null">
and tenant_id = #{tenantId}
</if>
<if test="ownerId != null">
and from_user = #{ownerId}
</if>
<choose>
<when test="couponOrderStatus != null">
co.coupon_order_status = #{couponOrderStatus}
</when>
<otherwise>
co.coupon_order_status=8
</otherwise>
</choose>
union
select <include refid="allCUserCardListColumns" />
from wx_coupon_order co
inner join wx_coupon c on co.coupon_id = c.id


Загрузка…
Отмена
Сохранить