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/java/com/iformall/controller/market/WxCouponPasswordController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPasswordController.java index 98fdf1c3e..5cd6903a6 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPasswordController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponPasswordController.java @@ -8,6 +8,7 @@ import com.iformall.controller.base.BaseController; import com.iformall.domain.po.base.BaseEntity; import com.iformall.domain.po.WxCouponPassword; import com.iformall.domain.vo.WxCouponPasswordCountInfoVO; +import com.iformall.domain.vo.WxCouponPasswordVo; import com.iformall.service.WxCouponPasswordService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -78,6 +79,19 @@ public class WxCouponPasswordController extends BaseController { } return new ResultData(); } + + @ApiOperation("批次卡密分页列表接口") + @GetMapping("/batchVoList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData batchList(@ModelAttribute WxCouponPassword wxCouponPassword, Integer pageNum, Integer pageSize) { + wxCouponPassword.updateTenantInfo(getTenantInfo()); + + wxCouponPassword.setSortColumns(BaseEntity.SortField.CreateDate_DESC, BaseEntity.SortField.Id_DESC); + final PageInfo page = wxCouponPasswordService.listVoAsPage(wxCouponPassword, pageNum, pageSize); + return new ResultData(page); + } } diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023022800001__card.sql b/mallinkAdmin/src/main/resources/db/migration/V2023022800001__card.sql index 36dfe5633..58100daf8 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2023022800001__card.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2023022800001__card.sql @@ -1,3 +1,20 @@ 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 owner_user_id bigint(20) comment '持有用户编码'; +alter table wx_card_info add column status int(1) not null default 0 comment '状态'; + +###待做####### +##coupon_password_id,coupon_password,c_user_id,owner_user_id 刷数据,后两者不能为空 +# 转赠验证wx_coupon_order的c_user_id不变 + +#select * from wx_card_info where (c_user_id is null or owner_user_id is null) +#and tenant_id = 789 order by create_date desc + +#update wx_card_info ci left join wx_coupon_order_89 co on ci.id = co.id +#set ci.c_user_id = co.c_user_id, ci.owner_user_id = co.owner_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 3801b5f1e..7d1bef413 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java @@ -24,14 +24,24 @@ public class WxCardInfo extends TenantEntity { protected Long id; @io.swagger.annotations.ApiModelProperty(value="卡密编码",name="couponPasswordId") protected Long couponPasswordId; - @io.swagger.annotations.ApiModelProperty(value="卡密",name="couponPassword") - protected String couponPassword; @TableField(exist = false) protected Long couponPasswordIdLike; + @TableField(exist = false) + protected List couponPasswordIdList; + @io.swagger.annotations.ApiModelProperty(value="卡密",name="couponPassword") + protected String couponPassword; @io.swagger.annotations.ApiModelProperty(value="卡类型EnumCardInfoType",name="type") protected Integer type; @io.swagger.annotations.ApiModelProperty(value = "券ID", name = "couponId") private Long couponId; + @io.swagger.annotations.ApiModelProperty(value = "购买用户ID", name = "cUserId") + private Long cUserId; + @TableField(exist = false) + private List cUserIdList; + @io.swagger.annotations.ApiModelProperty(value = "持有用户ID", name = "cUserId") + private Long ownerUserId; + @TableField(exist = false) + private List ownerUserIdList; @io.swagger.annotations.ApiModelProperty(value="微信订单号-购买类储值卡时的订单号",name="transactionId") private String transactionId; @io.swagger.annotations.ApiModelProperty(value="面额总金额",name="amount") @@ -63,6 +73,8 @@ public class WxCardInfo extends TenantEntity { private Date updateDate; @io.swagger.annotations.ApiModelProperty(value = "是否支持转送(0:不支持,1支持)", name = "supportTransfer") private Integer supportTransfer; + @io.swagger.annotations.ApiModelProperty(value = "状态EnumCardInfoStatus", name = "status") + private Integer status; @TableField(exist = false) @io.swagger.annotations.ApiModelProperty(value="查询-开始时间",name="startdate") protected Date startdate; 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 310022023..03211c35d 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCouponOrder.java @@ -54,6 +54,8 @@ public class WxCouponOrder extends TenantEntity { private Date expiredTime; @io.swagger.annotations.ApiModelProperty(value = "状态:0-待使用 1-已核销 2-已过期 3-已作废 4-卡使用中 5-卡已过期 6-卡已用完 7-卡已线下退款 100-预核销", name = "couponOrderStatus") private Integer couponOrderStatus; + @TableField(exist = false) + private List couponOrderStatusList; @io.swagger.annotations.ApiModelProperty(value = "创建时间", name = "createDate") private Date createDate; @io.swagger.annotations.ApiModelProperty(value = "创建时间数值,供查询优化用", name = "createDateTimes") diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCardCVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCardCVo.java index 75668349b..219b2c3ce 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/WxCardCVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCardCVo.java @@ -2,6 +2,7 @@ package com.iformall.domain.vo; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.iformall.domain.po.WxCardInfo; import com.iformall.domain.po.WxCouponOrder; import lombok.Data; import lombok.EqualsAndHashCode; @@ -58,6 +59,8 @@ public class WxCardCVo extends WxCouponOrder { @TableField(exist = false) protected String statusStr; + + private WxCardInfo wxCardInfo; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponPasswordVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponPasswordVo.java new file mode 100644 index 000000000..cea226aa4 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCouponPasswordVo.java @@ -0,0 +1,62 @@ +package com.iformall.domain.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.iformall.domain.po.WxCouponOrder; +import com.iformall.domain.po.base.TenantEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.util.Date; +import java.util.List; +@JsonIgnoreProperties(value = {"handler"}) +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxCouponPasswordVo extends TenantEntity { + + private static final long serialVersionUID = 6687954932922444531L; + + @Excel(name = "卡号", width = 20, orderNum = "1", prefix = "`") + protected Long id; + @Excel(name = "卡密", width = 20, orderNum = "2", prefix = "`") + @io.swagger.annotations.ApiModelProperty(value = "卡密", name = "couponPassword") + private String couponPassword; + @Excel(name = "创建时间", width = 20, exportFormat = "yyyy-MM-dd HH:mm:ss", orderNum = "3") + @io.swagger.annotations.ApiModelProperty(value = "", name = "createDate") + private Date createDate; + @Excel(name = "卡密状态", width = 20, orderNum = "4", replace = {"初始化_0", "消息发送中_1", "消息已发送_2", "已兑换_3","已作废_4"},prefix = "`") + @io.swagger.annotations.ApiModelProperty(value = "卡密状态", name = "remainPrice") + private Integer status; + @Excel(name = "卡激活状态", width = 20, orderNum = "5",replace = {"未激活_0", "已激活_1"}, prefix = "`") + @io.swagger.annotations.ApiModelProperty(value = "卡激活状态EnumYesOrNo", name = "used") + private Integer used; + @Excel(name = "激活时间", width = 20, exportFormat = "yyyy-MM-dd HH:mm:ss", orderNum = "6") + @io.swagger.annotations.ApiModelProperty(value = "", name = "activeDate") + private Date activeDate; + @Excel(name = "激活手机号", width = 20, orderNum = "7", prefix = "`") + @io.swagger.annotations.ApiModelProperty(value = "激活手机号", name = "phone") + private String phone; + @Excel(name = "激活会员", width = 20, orderNum = "8", prefix = "`") + @io.swagger.annotations.ApiModelProperty(value = "激活会员", name = "userName") + private String userName; + @Excel(name = "电子卡卡号", width = 20, orderNum = "9", prefix = "`") + @io.swagger.annotations.ApiModelProperty(value = "电子卡卡号", name = "cardId") + private Long cardId; + @Excel(name = "面额(元)", width = 20, orderNum = "10", prefix = "`") + @io.swagger.annotations.ApiModelProperty(value = "面额(元)", name = "price") + private Double price; + @Excel(name = "余额(元)", width = 20, orderNum = "11", prefix = "`") + @io.swagger.annotations.ApiModelProperty(value = "余额(元)", name = "remainPrice") + private Double remainPrice; + @Excel(name = "激活卡状态", width = 20, orderNum = "12",replace = {"正常_0", "已禁用_1"}, prefix = "`") + @io.swagger.annotations.ApiModelProperty(value = "激活卡状态EnumYesOrNo", name = "used") + private Integer cardStatus; + +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCardInfoStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumCardInfoStatus.java new file mode 100644 index 000000000..1bbfc4f5b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCardInfoStatus.java @@ -0,0 +1,36 @@ +package com.iformall.enums; + +/** + * Created by Stormeye on 2019/09/17. + */ +public enum EnumCardInfoStatus { + + + NORMAL(0, "正常"), + STOP(1, "已禁用"); + + public static EnumCardInfoStatus getEnum(Integer code) { + for (EnumCardInfoStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumCardInfoStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java index 867dd7bce..5aa3cdea3 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCouponPasswordStatus.java @@ -10,8 +10,7 @@ public enum EnumCouponPasswordStatus { MSG_SENDING(1, "消息发送中"), MSG_SENDED(2, "消息已发送"), USED(3, "已兑换"), - CANCEL(4, "已作废"), - PAID(5, "已支付过"),; + CANCEL(4, "已作废"); public static EnumCouponPasswordStatus getEnum(Integer code) { for (EnumCouponPasswordStatus value : values()) { 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/mapper/WxCouponOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java index c613127dc..1f3d162c3 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java @@ -17,6 +17,7 @@ public interface WxCouponOrderMapper extends CommonMapper { WxCouponOrder selectById(@Param("id")Long id,@Param("tenantId")String tenantId); List findList(WxCouponOrder wxCouponOrder); + List findIdList(WxCouponOrder wxCouponOrder); List findListOfOrderedByDate(Map dateMap); List findListOfVerifiedByDate(Map dateMap); diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java index b54f7127c..2dbc57002 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java @@ -46,6 +46,7 @@ public interface WxCUserBasicInfoService { PageInfo listAsPage(WxCUserBasicInfo record, Integer pageIndex, Integer pageSize); List listPhoneAndNameByIds(WxCUserBasicInfo record); + List findIdList(WxCUserBasicInfo record); Map getUserMap(TenantEntity tenantEntity, List cUserIdList); /** diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponPasswordService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponPasswordService.java index 6e99efbb3..1fc52b559 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponPasswordService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponPasswordService.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxCouponPassword; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.WxCouponPasswordCountInfoVO; +import com.iformall.domain.vo.WxCouponPasswordVo; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -21,6 +22,8 @@ public interface WxCouponPasswordService { */ PageInfo listAsPage(WxCouponPassword record, Integer pageIndex, Integer pageSize); + PageInfo listVoAsPage(WxCouponPassword record, Integer pageIndex, Integer pageSize); + /** * 根据Id获得实体 * diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java index 267004304..5b87c23e6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java @@ -1333,5 +1333,10 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc } return null; } + + @Override + public List findIdList(WxCUserBasicInfo record) { + return wxCUserBasicInfoMapper.findIdList(record); + } } 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..71f406e35 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java @@ -1,24 +1,38 @@ package com.iformall.service.impl; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; 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.EnumCouponType; +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 +40,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 +64,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)); + handleQueryParam(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,WxCardVo record) { + 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(record); + 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(record.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(record); + 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 @@ -77,13 +230,14 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { @Override public void exportData(WxCardVo record, HttpServletRequest request, HttpServletResponse response) { - handleCouponOnlineEndDate(record); - List list = wxCardInfoMapper.findVoList(record); + handleQueryParam(record); + List cardInfoList = wxCardInfoMapper.findList(record); + List list = this.handleToCardVoList(cardInfoList,record); excelService.exportExcel(list, null, "卡订单", WxCardVo.class, "卡订单.xlsx", response, false); } - private void handleCouponOnlineEndDate(WxCardVo record){ + private void handleQueryParam(WxCardVo record){ if (null != record.getCouponOnlineStartDate() || null != record.getCouponOnlineEndDate() ) { WxCouponChannel wxCouponChannelQ = new WxCouponChannel(); wxCouponChannelQ.updateTenantInfo(record); @@ -96,6 +250,33 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { record.setCouponIdList(ccIds); } } + + if ((null != record.getStatusS() && record.getStatusS().size() > 0 ) || null != record.getStatus()) { + WxCouponOrder couponOrderQ = new WxCouponOrder(); + couponOrderQ.updateTenantInfo(record); + couponOrderQ.setCouponOrderStatusList(record.getStatusS()); + couponOrderQ.setCouponOrderStatus(record.getStatus()); + couponOrderQ.setCouponType(EnumCouponType.CARD_MULTIMCH.getCode()); + List orderIdList = wxCouponOrderMapper.findIdList(couponOrderQ); + if (null != orderIdList && orderIdList.size() > 0 ) { + record.setIds(orderIdList); + }else { + record.setId(-999L); + } + } + if (StringUtils.isNotBlank(record.getOuPhone()) || StringUtils.isNotBlank(record.getOnickName())) { + WxCUserBasicInfo userQ = new WxCUserBasicInfo(); + userQ.setFinalTenantId(record.getFinalTenantId()); + userQ.setPhone(StringUtils.trimToNull(record.getOuPhone())); + userQ.setNickName(StringUtils.trimToNull(record.getOnickName())); + List userIdList = wxCUserBasicInfoService.findIdList(userQ); + if (null != userIdList && userIdList.size() > 0 ) { + record.setOwnerUserIdList(userIdList); + }else { + record.setId(-999L); + } + } + } @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @@ -127,6 +308,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/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index 5afe63030..d2728a249 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -2482,6 +2482,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { cvo.setRemainingAmount(cardInfo.getRemainingAmount()); cvo.setSupportTransfer(cardInfo.getSupportTransfer()); } + cvo.setWxCardInfo(cardInfo); return cvo; } catch (IllegalAccessException | InvocationTargetException e) { logger.error("getCouponOrderCardCVo error.",e); @@ -2521,15 +2522,18 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { //卡券是否存在 WxCardCVo cardCVo = findCardDetailOfCUser(record.getId(),record.getTenantId()); if (cardCVo == null) { - logger.info("卡券不存在" + record.getId()); return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); } + WxCardInfo cardInfo = cardCVo.getWxCardInfo(); + if (null == cardInfo) { + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL.getCode(),"cardInfo未查询到"); + } + //转赠人是否存在 Long cUserId = record.getCUserId(); WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoMapper.selectById(cUserId,cardCVo.getFinalTenantId()); if (wxCUserBasicInfo == null) { - logger.info("转赠人不存在:" + cUserId); return new ResultData(ErrorCode.USER_IS_EMPTY.getCode(), "转赠人不存在"); } @@ -2560,9 +2564,13 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } //更新卡拥有者 try { - record.setCUserId(null); record.setUpdateDate(new Date()); wxCouponOrderMapper.updateById(record); + + cardInfo.setCUserId(record.getOwnerId()); + cardInfo.setUpdateDate(new Date()); + wxCardInfoMapper.updateById(cardInfo); + } catch (Exception e) { logger.info("更新卡拥有者信息失败"); throw new MallinkException(ErrorCode.CARD_TRANSFER_INVALID); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPasswordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPasswordServiceImpl.java index 74896cedc..6a8221b39 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPasswordServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponPasswordServiceImpl.java @@ -3,25 +3,49 @@ 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.WxCouponOrder; import com.iformall.domain.po.WxCouponPassword; +import com.iformall.domain.po.WxMall; +import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxMerchantBUser; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumCouponOrderStatus; import com.iformall.enums.EnumCouponPasswordStatus; +import com.iformall.enums.EnumYesOrNo; +import com.iformall.domain.vo.WxCouponOrderBVo; import com.iformall.domain.vo.WxCouponPasswordCountInfoVO; +import com.iformall.domain.vo.WxCouponPasswordVo; +import com.iformall.domain.vo.WxMerchantProductVo; import com.iformall.common.ErrorCode; import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxCardInfoMapper; import com.iformall.mapper.WxCouponPasswordMapper; import com.iformall.service.ExcelService; +import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCouponPasswordService; + +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import java.lang.reflect.InvocationTargetException; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Random; @Service @@ -30,6 +54,11 @@ public class WxCouponPasswordServiceImpl implements WxCouponPasswordService { @Autowired WxCouponPasswordMapper wxCouponPasswordMapper; + @Autowired + WxCardInfoMapper wxCardInfoMapper; + @Lazy + @Autowired + WxCUserBasicInfoService wxCUserBasicInfoService; @Autowired ExcelService excelService; @@ -38,6 +67,93 @@ public class WxCouponPasswordServiceImpl implements WxCouponPasswordService { public PageInfo listAsPage(WxCouponPassword record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponPasswordMapper.findList(record)); } + + @Override + public PageInfo listVoAsPage(WxCouponPassword record, Integer pageIndex, Integer pageSize) { + PageInfo passwordPage = listAsPage(record,pageIndex,pageSize); + PageInfo retPageInfo = new PageInfo(); + retPageInfo.setPageNum(pageIndex); + retPageInfo.setPageSize(pageSize); + retPageInfo.setPages(passwordPage.getPages()); + retPageInfo.setTotal(passwordPage.getTotal()); + retPageInfo.setList(handleQueryResult(passwordPage.getList(), record)); + return retPageInfo; + } + + private List handleQueryResult(List list,TenantEntity tenantEntity) { + if (null != list && list.size() > 0) { + List couponPasswordIdList = new ArrayList(); + for (int i = 0 ; i < list.size() ; i ++ ) { + WxCouponPassword bo = list.get(i); + if (null != bo.getId() && (!couponPasswordIdList.contains(bo.getId()))) { + couponPasswordIdList.add(bo.getId()); + } + } + + List cUserIdList = new ArrayList(); + Map passwordCardInfoMap = new HashMap(); + if (couponPasswordIdList.size() > 0 ) { + WxCardInfo cardInfoQ = new WxCardInfo(); + cardInfoQ.updateTenantInfo(tenantEntity); + cardInfoQ.setCouponPasswordIdList(couponPasswordIdList); + List cardList = wxCardInfoMapper.findList(cardInfoQ); + if (null != cardList && cardList.size() > 0) { + for (int i = 0 ; i < cardList.size(); i++) { + WxCardInfo ci = cardList.get(i); + passwordCardInfoMap.put(ci.getCouponPasswordId(), ci); + if (null != ci.getCUserId() && (!cUserIdList.contains(ci.getCUserId()))) { + cUserIdList.add(ci.getCUserId()); + } + + } + } + } + + Map cUserMap = new HashMap(); + if (cUserIdList.size() > 0) { + WxCUserBasicInfo cUserBasicInfoQ = new WxCUserBasicInfo(); + cUserBasicInfoQ.setIds(cUserIdList); + 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); + } + } + } + + List retList = new ArrayList(); + for (int i = 0 ; i < list.size() ; i ++) { + WxCouponPassword coo = list.get(i); + WxCouponPasswordVo co = new WxCouponPasswordVo(); + WxCardInfo cardInfo = passwordCardInfoMap.get(coo.getId()); + co.setId(coo.getId()); + co.setCouponPassword(coo.getPassword()); + if (null != cardInfo) { + co.setUsed(EnumYesOrNo.YES.getCode()); + co.setPrice(new BigDecimal(cardInfo.getAmount()).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); + co.setRemainPrice(new BigDecimal(cardInfo.getRateAmount()).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); + co.setActiveDate(cardInfo.getCreateDate()); + WxCUserBasicInfo basicInfo = cUserMap.get(cardInfo.getCUserId()); + if (null != basicInfo) { + co.setPhone(basicInfo.getPhone()); + co.setUserName(basicInfo.getName()); + } + co.setCardStatus(cardInfo.getStatus()); + co.setCardId(cardInfo.getId()); + }else { + co.setUsed(EnumYesOrNo.NO.getCode()); + } + co.setStatus(coo.getStatus()); + co.setCreateDate(coo.getCreateDate()); + retList.add(co); + } + return retList; + } + return new ArrayList(); + + } @Override public WxCouponPassword getById(Long id) { 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 ab998be30..9113629d6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -1456,7 +1456,8 @@ public class WxOrderServiceImpl implements WxOrderService { cardInfo.setAmount(coupon.getPrice()); cardInfo.setSaleAmount(coupon.getSalePrice()); cardInfo.setCouponPasswordId(couponPassWord.getId()); - cardInfo.setCouponPassword(couponPassWord.getPassword()); + cardInfo.setCouponPassword(couponPassWord.getPassword()); + cardInfo.setCUserId(user.getId()); cardInfo.setRemainingAmount(coupon.getPrice()); if (!coupon.checkIsFree()) { //判断该transctionId是否已经存在,如果存在,则不添加 @@ -1501,7 +1502,6 @@ public class WxOrderServiceImpl implements WxOrderService { cardInfo.setCreateDate(curr); cardInfo.setUpdateDate(curr); cardInfo.setSupportTransfer(coupon.getSupportTransfer()); - //检查卡是否下架,如果是,不可转赠 WxCouponChannel wxCouponChannel = wxCouponChannelMapper.selectById(order.getCouponChannelId(),order.getTenantId()); if (wxCouponChannel != null && wxCouponChannel.getStatus().equals(EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode())) { diff --git a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml index d81f7ac92..da88c1ac8 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserBasicInfoMapper.xml @@ -101,6 +101,11 @@ and wcubi.`name` like concat('%', #{name},'%') + + + and wcubi.`nick_name` like concat('%', #{nickName},'%') + + and wcubi.`create_date` between #{startTime} and #{endTime} diff --git a/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml b/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml index 58655d0aa..274c22ed9 100644 --- a/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml @@ -6,6 +6,8 @@ + + @@ -22,25 +24,28 @@ - `id`,`tenant_id`,`parent_tenant_id`,`coupon_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` - where 1 = 1 + where `tenant_id` = #{tenantId} and `id` = #{id} - - and `tenant_id` = #{tenantId} - and `parent_tenant_id` = #{parentTenantId} and `coupon_id` = #{couponId} + + and `c_user_id` = #{cUserId} + + + and `owner_user_id` = #{ownerUserId} + and `transaction_id` = #{transactionId} @@ -80,8 +85,17 @@ and `coupon_password` like concat('%',#{couponPassword},'%') - - and `create_date` between #{startdate} and #{enddate} + + and `create_date` >= #{startdate} + + + and `create_date` <= #{enddate} + + + and coupon_password_id in + + #{cpidItem} + and coupon_id in @@ -89,153 +103,27 @@ #{cidItem} - - and id in - - #{idItem} + + and c_user_id in + + #{cuidItem} - 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 owner_user_id in + + #{ouidItem} - and ci.id in + and id in - #{idItem} + #{idItem} - order by ci.id desc + order by ${sortColumns} - - update wx_card_info set support_transfer=0,update_date=now() where support_transfer=1 and coupon_id=#{couponId} diff --git a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml index 1e7ffa831..9ed845877 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml @@ -151,6 +151,13 @@ and `shipping_status` = #{shippingStatus} + + and coupon_order_status in + + #{cosidItem} + + + and id in @@ -169,6 +176,11 @@ + +