diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index f8db06064..d918c1721 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/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); + + } + + } diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 5caecb556..cfd418442 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/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, "消费卡转赠已失效"), /** * 卡消费 diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCardTransferInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCardTransferInfo.java new file mode 100644 index 000000000..32940be75 --- /dev/null +++ b/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 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 getIds() { + return ids; + } + + public void setIds(List 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; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java index 8801128f1..b21955aa8 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponOrderStatus.java +++ b/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) { diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCardTransferInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCardTransferInfoMapper.java new file mode 100644 index 000000000..90a0624ed --- /dev/null +++ b/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 { + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index 41cb30749..885337975 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/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); + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index 7ca71168d..b87e7fbbd 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/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 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); + } + } diff --git a/mallinkService/src/main/resources/mapper/WxCardTransferInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCardTransferInfoMapper.xml new file mode 100644 index 000000000..840c8120c --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxCardTransferInfoMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml index 95028f75c..573a71eee 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml @@ -659,11 +659,29 @@ 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