| @@ -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); | |||
| } | |||
| } | |||
| @@ -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, "消费卡转赠已失效"), | |||
| /** | |||
| * 卡消费 | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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) { | |||
| @@ -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> { | |||
| } | |||
| @@ -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); | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||
| @@ -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> | |||
| @@ -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 | |||