diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardInfoController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardInfoController.java index fbc309305..e4e391cc3 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardInfoController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardInfoController.java @@ -54,7 +54,7 @@ public class WxCardInfoController extends BaseController { @Autowired WxCardSpendService wxCardSpendService; - @ApiOperation("批次消费卡的卡列表") + @ApiOperation("批次消费卡(已激活电子卡电子卡)的卡列表") @GetMapping("list") @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023022800001__card.sql b/mallinkAdmin/src/main/resources/db/migration/V2023022800001__card.sql index 28b4cccc9..2f448cc5a 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2023022800001__card.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2023022800001__card.sql @@ -1,8 +1,9 @@ alter table wx_card_info add column coupon_password varchar(50) comment '卡密'; -alter table wx_card_info add column c_user_id bigint(20) comment '用户编码'; +alter table wx_card_info add column c_user_id bigint(20) comment '购买用户编码'; +alter table wx_card_info add column owner_user_id bigint(20) comment '持有用户编码'; ###待做####### -##coupon_password_id,coupon_password,c_user_id 刷数据 +##coupon_password_id,coupon_password,c_user_id,owner_user_id 刷数据,后两者不能为空 # 转赠验证wx_coupon_order的c_user_id不变 diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java index 2f2b664ba..b6e4989c9 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCardPayController.java @@ -173,11 +173,15 @@ public class WxCardPayController extends BaseController { } //查看所有者与扫码者是否为一致 - WxCouponOrder couponOrder = wxCouponOrderService.getById(cardInfo.getId(),cardInfo.getTenantId()); - if (!couponOrder.getOwnerId().equals(cUserId)) { - logger.error("卡已被领取: " + cardInfo.getId()); - return new ResultData(ErrorCode.CARD_TRANSFERED); - } + if (!cardInfo.getOwnerUserId().equals(cUserId)) { + logger.error("卡已被领取: " + cardInfo.getId()); + return new ResultData(ErrorCode.CARD_TRANSFERED); + } +// WxCouponOrder couponOrder = wxCouponOrderService.getById(cardInfo.getId(),cardInfo.getTenantId()); +// if (!couponOrder.getOwnerId().equals(cUserId)) { +// logger.error("卡已被领取: " + cardInfo.getId()); +// return new ResultData(ErrorCode.CARD_TRANSFERED); +// } WxCouponMerchant couponMerchant = wxCardSpendService.checkMerchantInCoupon(cardInfo, merchantId); if(couponMerchant == null) { diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java index 4ec9331ed..5cc9f540c 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java @@ -77,7 +77,6 @@ public class WxCouponPasswordController extends BaseController { logger.error(e.getMessage()); return new ResultData(500, e.getMessage()); } - WxCUserBasicInfo member = userService.getById(memberId,getFinalTenantId()); if(member == null) { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java index 4d0a2232f..894c33230 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java @@ -34,8 +34,11 @@ public class WxCardInfo extends TenantEntity { protected Integer type; @io.swagger.annotations.ApiModelProperty(value = "券ID", name = "couponId") private Long couponId; - @io.swagger.annotations.ApiModelProperty(value = "用户ID", name = "cUserId") + @io.swagger.annotations.ApiModelProperty(value = "购买用户ID", name = "cUserId") private Long cUserId; + @io.swagger.annotations.ApiModelProperty(value = "持有用户ID", name = "cUserId") + private Long ownerUserId; + @io.swagger.annotations.ApiModelProperty(value="微信订单号-购买类储值卡时的订单号",name="transactionId") private String transactionId; @io.swagger.annotations.ApiModelProperty(value="面额总金额",name="amount") diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCardInfoMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCardInfoMapper.java index 6d5c0eb5c..76bbfc27b 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCardInfoMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCardInfoMapper.java @@ -8,7 +8,7 @@ import java.util.List; public interface WxCardInfoMapper extends CommonMapper { - List findVoList(WxCardVo wxCardVo); + //List findVoList(WxCardVo wxCardVo); void updateTransferStatusByCouponId(Long couponId); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java index 60220c96e..e19e07cd4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java @@ -3,22 +3,34 @@ package com.iformall.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCardInfo; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxCouponChannel; +import com.iformall.domain.po.WxCouponOrder; import com.iformall.domain.po.WxCouponPassword; +import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.WxCardVo; +import com.iformall.domain.vo.WxCouponOrderBVo; +import com.iformall.domain.vo.WxCouponPasswordVo; import com.iformall.enums.EnumCardInfoType; import com.iformall.enums.EnumCouponPasswordStatus; import com.iformall.enums.EnumCouponPasswordSupport; +import com.iformall.enums.EnumYesOrNo; import com.iformall.mapper.WxCardInfoMapper; import com.iformall.mapper.WxCouponChannelMapper; +import com.iformall.mapper.WxCouponMapper; +import com.iformall.mapper.WxCouponOrderMapper; import com.iformall.mapper.WxCouponPasswordMapper; import com.iformall.service.ExcelService; +import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCardInfoService; +import com.iformall.utils.Constant; import com.iformall.utils.RedisLock; +import org.apache.commons.beanutils.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -26,8 +38,12 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Service public class WxCardInfoServiceImpl implements WxCardInfoService { @@ -46,11 +62,146 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { @Autowired WxCouponPasswordMapper couponPasswordMapper; + + @Autowired + WxCouponMapper wxCouponMapper; + + @Lazy + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; + + @Autowired + WxCouponOrderMapper wxCouponOrderMapper; + + @Override public PageInfo listAsPage(WxCardVo record, Integer pageIndex, Integer pageSize) { handleCouponOnlineEndDate(record); - return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCardInfoMapper.findVoList(record)); + PageInfo cardInfoPage = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCardInfoMapper.findList(record)); + PageInfo pageInfo = new PageInfo(); + pageInfo.setList(handleToCardVoList(cardInfoPage.getList(),record)); + pageInfo.setPageNum(cardInfoPage.getPageNum()); + pageInfo.setPageSize(cardInfoPage.getPageSize()); + pageInfo.setPages(cardInfoPage.getPages()); + pageInfo.setTotal(cardInfoPage.getTotal()); + return pageInfo; + } + + private List handleToCardVoList(List list,TenantEntity tenantEntity) { + if (null != list && list.size() > 0) { + List couponIdList = new ArrayList(); + List userIdList = new ArrayList(); + List cardIdList = new ArrayList(); + for (int i = 0 ; i < list.size() ; i ++ ) { + WxCardInfo bo = list.get(i); + if (null != bo.getId() && (!cardIdList.contains(bo.getId()))) { + cardIdList.add(bo.getId()); + } + if (null != bo.getCouponId() && (!couponIdList.contains(bo.getCouponId()))) { + couponIdList.add(bo.getCouponId()); + } + if (null != bo.getCUserId() && (!userIdList.contains(bo.getCUserId()))) { + userIdList.add(bo.getCUserId()); + } + if (null != bo.getOwnerUserId() && (!userIdList.contains(bo.getOwnerUserId()))) { + userIdList.add(bo.getOwnerUserId()); + } + } + + Map couponMap = new HashMap(); + if (couponIdList.size() > 0 ) { + WxCoupon couponQ = new WxCoupon(); + couponQ.updateTenantInfo(tenantEntity); + couponQ.setIds(couponIdList); + List couponList = wxCouponMapper.findList(couponQ); + if (null != couponList && couponList.size() > 0) { + for (int i = 0 ; i < couponList.size(); i++) { + WxCoupon ci = couponList.get(i); + couponMap.put(ci.getId(), ci); + } + } + } + + Map cUserMap = new HashMap(); + if (userIdList.size() > 0) { + WxCUserBasicInfo cUserBasicInfoQ = new WxCUserBasicInfo(); + cUserBasicInfoQ.setIds(userIdList); + cUserBasicInfoQ.setFinalTenantId(tenantEntity.getFinalTenantId()); + List cuserList = wxCUserBasicInfoService.listPhoneAndNameByIds(cUserBasicInfoQ); + if (null != cuserList) { + for (int i = 0 ; i < cuserList.size() ; i++) { + WxCUserBasicInfo cbi = cuserList.get(i); + cUserMap.put(cbi.getId(), cbi); + } + } + } + + Map couponOrderMap = new HashMap(); + if (cardIdList.size() > 0 ) { + WxCouponOrder couponOrderQ = new WxCouponOrder(); + couponOrderQ.updateTenantInfo(tenantEntity); + couponOrderQ.setIds(cardIdList); + List couponOrderList = wxCouponOrderMapper.findList(couponOrderQ); + if (null != couponOrderList) { + for (int i = 0 ; i < couponOrderList.size(); i ++) { + WxCouponOrder co = couponOrderList.get(i); + couponOrderMap.put(co.getId(), co); + } + } + } + + List retList = new ArrayList(); + for (int i = 0 ; i < list.size() ; i ++) { + WxCardInfo coo = list.get(i); + WxCardVo co = new WxCardVo(); + try { + BeanUtils.copyProperties(co, coo); + //coupon + WxCoupon coupon = couponMap.get(coo.getCouponId()); + if (null != coupon) { + co.setCoverImg(coupon.getCoverImg()); + co.setCoverPicture(coupon.getCoverPicture()); + co.setDetailPicture(coupon.getDetailPicture()); + co.setTitle(coupon.getTitle()); + co.setSubTitle(coupon.getSubTitle()); + co.setDetail(coupon.getDetail()); + co.setUnit(coupon.getUnit()); + co.setRemark(coupon.getRemark()); + co.setSalePrice(coupon.getSalePrice()); + co.setPrice(coupon.getPrice()); + co.setSubsidyType(coupon.getSubsidyType()); + co.setSubsidyNum(coupon.getSubsidyNum()); + } + //couponOrder + WxCouponOrder couponOrder = couponOrderMap.get(coo.getId()); + if (null != couponOrder) { + //co.setCuserId(); + //co.setOwnerId(); + co.setExpiredTime(couponOrder.getExpiredTime()); + co.setStatus(couponOrder.getCouponOrderStatus()); + } + + //user + WxCUserBasicInfo buyUser = cUserMap.get(coo.getCUserId()); + if (null != buyUser) { + co.setCnickName(buyUser.getNickName()); + } + WxCUserBasicInfo owner = cUserMap.get(coo.getCUserId()); + if (null != owner) { + co.setOnickName(owner.getNickName()); + co.setOuPhone(owner.getPhone()); + } + retList.add(co); + }catch(Exception e) { + + } + + } + return retList; + } + return new ArrayList(); + } @Override @@ -78,7 +229,8 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { @Override public void exportData(WxCardVo record, HttpServletRequest request, HttpServletResponse response) { handleCouponOnlineEndDate(record); - List list = wxCardInfoMapper.findVoList(record); + List cardInfoList = wxCardInfoMapper.findList(record); + List list = this.handleToCardVoList(cardInfoList,record); excelService.exportExcel(list, null, "卡订单", WxCardVo.class, "卡订单.xlsx", response, false); } @@ -127,6 +279,8 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { updateCPwd.setStatus(EnumCouponPasswordStatus.USED.getCode()); couponPasswordMapper.updateById(updateCPwd); } + cardInfo.setCUserId(Constant.defaultCUserId); + cardInfo.setOwnerUserId(Constant.defaultCUserId); cardInfo.setServiceFeeAmount(0); cardInfo.setCreateDate(new Date()); cardInfo.setUpdateDate(new Date()); diff --git a/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml index 3a1512a88..993efa2e7 100644 --- a/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml @@ -7,6 +7,7 @@ + @@ -23,7 +24,7 @@ - `id`,`tenant_id`,`parent_tenant_id`,`coupon_id`,`c_user_id`,`coupon_password_id`,`coupon_password`,`transaction_id`, + `id`,`tenant_id`,`parent_tenant_id`,`coupon_id`,`c_user_id`,`owner_user_id`,`coupon_password_id`,`coupon_password`,`transaction_id`, `amount`,`sale_amount`,`remaining_amount`,`service_fee_amount`,`share_fee_amount`,`remaining_share_fee_amount`, `rate_amount`,`create_date`,`update_date`,`support_transfer` @@ -42,6 +43,9 @@ and `c_user_id` = #{cUserId} + + and `owner_user_id` = #{ownerUserId} + and `transaction_id` = #{transactionId} @@ -105,144 +109,6 @@ order by ${sortColumns} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ci.`id`,ci.`tenant_id`,ci.`parent_tenant_id`,ci.`coupon_id`,ci.`transaction_id`, - ci.`amount`,ci.`sale_amount`,ci.`remaining_amount`,ci.`service_fee_amount`, - ci.`share_fee_amount`,ci.`remaining_share_fee_amount`, ci.`rate_amount`, - ci.`create_date`,ci.`update_date`, - c.`cover_img`, c.`cover_picture`,c.`detail_picture`,c.`title`, c.`sub_title`, c.`detail`, - c.`unit`, c.`remark`, c.`sale_price`, c.`price`, c.`subsidy_type`, c.`subsidy_num`, - co.`c_user_id`, co.`owner_id`, co.`expired_time`, co.`coupon_order_status` as status, - ou.`nick_name` as c_nick_name, ou.`nick_name` as o_nick_name, ou.`phone` as ou_phone - - - - where 1 = 1 - - and ci.`id` = #{id} - - - and ci.`tenant_id` = #{tenantId} - - - and ci.`parent_tenant_id` = #{parentTenantId} - - - and ci.`coupon_id` = #{couponId} - - - and ci.`transaction_id` = #{transactionId} - - - and ci.`amount` = #{amount} - - - and ci.`sale_amount` = #{saleAmount} - - - and ci.`remaining_amount` = #{remainingAmount} - - - and ci.`service_fee_amount` = #{serviceFeeAmount} - - - and ci.`share_fee_amount` = #{shareFeeAmount} - - - and ci.`remaining_share_fee_amount` = #{remainingShareFeeAmount} - - - and ci.`rate_amount` = #{rateAmount} - - - and ci.`create_date` = #{createDate} - - - and ci.`update_date` = #{updateDate} - - - and co.`coupon_order_status` = #{status} - - - and ou.`phone` = #{ouPhone} - - - and ci.`create_date` between #{startdate} and #{enddate} - - - and ou.`nick_name` like concat('%',#{onickName},'%') - - - and co.`coupon_order_status` in - - #{sItem} - - - - and ci.coupon_id in - - #{cidItem} - - - - and ci.id in - - #{idItem} - - - order by ci.id desc - - - - update wx_card_info set support_transfer=0,update_date=now() where support_transfer=1 and coupon_id=#{couponId}