Merge remote-tracking branch 'origin/test' into test
This commit is contained in:
commit
f0fabd5d73
|
|
@ -37,6 +37,13 @@ public class UserAuthorizationController {
|
||||||
return CzgResult.success(userAuthorizationService.login(userAuthorizationLoginDTO));
|
return CzgResult.success(userAuthorizationService.login(userAuthorizationLoginDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/test")
|
||||||
|
public CzgResult<String> test() {
|
||||||
|
StpKit.USER.login(15114L, "or1l867go4WD5DYBT1iejr1DqGIw", null, null, null, MyStpLogic.LoginType.USER, false, "userMini");
|
||||||
|
|
||||||
|
return CzgResult.success(StpKit.USER.getTokenValue());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取手机号
|
* 获取手机号
|
||||||
* @param getPhoneDTO 获取手机号信息
|
* @param getPhoneDTO 获取手机号信息
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,18 @@
|
||||||
package com.czg.controller.user;
|
package com.czg.controller.user;
|
||||||
|
|
||||||
import com.czg.market.dto.MemberOrderDTO;
|
|
||||||
import com.czg.market.entity.MemberOrder;
|
|
||||||
import com.czg.market.entity.MkShopConsumeDiscountRecord;
|
|
||||||
import com.czg.market.service.MkShopConsumeDiscountRecordService;
|
|
||||||
import com.czg.market.service.TbMemberConfigService;
|
import com.czg.market.service.TbMemberConfigService;
|
||||||
|
import com.czg.market.vo.MemberDetailVO;
|
||||||
|
import com.czg.market.vo.MemberListVO;
|
||||||
|
import com.czg.market.vo.UMemberConfigVO;
|
||||||
import com.czg.resp.CzgResult;
|
import com.czg.resp.CzgResult;
|
||||||
import com.czg.sa.StpKit;
|
import com.czg.sa.StpKit;
|
||||||
import com.czg.utils.ServletUtil;
|
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新客立减相关
|
* 会员相关
|
||||||
*
|
*
|
||||||
* @author Administrator
|
* @author Administrator
|
||||||
*/
|
*/
|
||||||
|
|
@ -23,4 +22,30 @@ public class UMemberController {
|
||||||
@Resource
|
@Resource
|
||||||
private TbMemberConfigService memberConfigService;
|
private TbMemberConfigService memberConfigService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前店铺会员开通配置信息
|
||||||
|
* @param shopId 店铺id
|
||||||
|
*/
|
||||||
|
@GetMapping("/config")
|
||||||
|
public CzgResult<UMemberConfigVO> getConfig(@RequestParam Long shopId) {
|
||||||
|
return CzgResult.success(memberConfigService.detail(shopId, StpKit.USER.getLoginIdAsLong()));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 获取所有已开通的会员
|
||||||
|
* @return 列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list")
|
||||||
|
public CzgResult<List<MemberListVO>> getMemberList() {
|
||||||
|
return CzgResult.success(memberConfigService.getMemberList(StpKit.USER.getLoginIdAsLong()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取会员信息详情
|
||||||
|
* @param shopId 店铺id
|
||||||
|
*/
|
||||||
|
@GetMapping("/detail")
|
||||||
|
public CzgResult<MemberDetailVO> getDetail(@RequestParam Long shopId) {
|
||||||
|
return CzgResult.success(memberConfigService.getUserDetail(StpKit.USER.getLoginIdAsLong(), shopId));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -80,11 +80,10 @@ public class UserOrderController {
|
||||||
* @param orderDTO 充值信息
|
* @param orderDTO 充值信息
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@PostMapping("/createMemberOrder")
|
@PostMapping("/joinMember")
|
||||||
public CzgResult<MemberOrder> createMemberOrder(@Validated @RequestBody MemberOrderDTO orderDTO) {
|
public CzgResult<MemberOrder> joinMember(@Validated @RequestBody MemberOrderDTO orderDTO) {
|
||||||
orderDTO.setPlatformType(ServletUtil.getHeaderIgnoreCase(ServletUtil.getRequest(), "platformType"));
|
orderDTO.setPlatformType(ServletUtil.getHeaderIgnoreCase(ServletUtil.getRequest(), "platformType"));
|
||||||
orderDTO.setUserId(StpKit.USER.getLoginIdAsLong());
|
orderDTO.setUserId(StpKit.USER.getLoginIdAsLong());
|
||||||
orderDTO.setShopId(StpKit.USER.getShopId());
|
|
||||||
orderDTO.setOrderType("miniapp");
|
orderDTO.setOrderType("miniapp");
|
||||||
return CzgResult.success(memberOrderService.createMemberOrder(orderDTO));
|
return CzgResult.success(memberOrderService.createMemberOrder(orderDTO));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,17 @@ package com.czg.account.dto.shopuser;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Administrator
|
* @author Administrator
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class ShopUserAddDTO {
|
@Accessors(chain = true)
|
||||||
|
public class ShopUserAddDTO implements Serializable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户头像
|
* 用户头像
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import com.mybatisflex.annotation.Table;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
@ -24,6 +25,7 @@ import java.time.LocalDateTime;
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Table("tb_shop_user")
|
@Table("tb_shop_user")
|
||||||
|
@Accessors(chain = true)
|
||||||
public class ShopUser implements Serializable {
|
public class ShopUser implements Serializable {
|
||||||
|
|
||||||
@Serial
|
@Serial
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ public interface UserInfoService extends IService<UserInfo> {
|
||||||
|
|
||||||
UserInfoDTO getInfo(long userInfoId);
|
UserInfoDTO getInfo(long userInfoId);
|
||||||
|
|
||||||
|
|
||||||
Boolean updateInfo(long shopId, long userId, UserInfoEditDTO userInfoEditDTO);
|
Boolean updateInfo(long shopId, long userId, UserInfoEditDTO userInfoEditDTO);
|
||||||
|
|
||||||
Boolean updatePwd(long userId, UserInfoPwdEditDTO userInfoPwdEditDTO);
|
Boolean updatePwd(long userId, UserInfoPwdEditDTO userInfoPwdEditDTO);
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.czg.market.dto;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.Min;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
|
@ -33,17 +34,20 @@ public class MemberOrderDTO implements Serializable {
|
||||||
/**
|
/**
|
||||||
* 名称
|
* 名称
|
||||||
*/
|
*/
|
||||||
@NotBlank(message = "方案名称不为空")
|
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数量
|
* 数量
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "数量不为空")
|
@Min(1)
|
||||||
private Integer num;
|
private Integer num;
|
||||||
private String platformType;
|
private String platformType;
|
||||||
private Long userId;
|
private Long userId;
|
||||||
private String orderType;
|
private String orderType;
|
||||||
|
private Integer sex;
|
||||||
|
private String birthDay;
|
||||||
|
private String nickName;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,13 @@ import com.czg.constant.TableValueConstant;
|
||||||
import com.czg.exception.ApiNotPrintException;
|
import com.czg.exception.ApiNotPrintException;
|
||||||
import com.czg.market.dto.MemberConfigDTO;
|
import com.czg.market.dto.MemberConfigDTO;
|
||||||
import com.czg.market.dto.MemberLevelDTO;
|
import com.czg.market.dto.MemberLevelDTO;
|
||||||
import com.czg.market.dto.MemberOrderDTO;
|
import com.czg.market.vo.*;
|
||||||
import com.czg.market.entity.MemberOrder;
|
|
||||||
import com.czg.market.vo.MemberConfigVO;
|
|
||||||
import com.czg.market.vo.MemberLevelVO;
|
|
||||||
import com.mybatisflex.core.service.IService;
|
import com.mybatisflex.core.service.IService;
|
||||||
import com.czg.market.entity.TbMemberConfig;
|
import com.czg.market.entity.TbMemberConfig;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员基础配置 服务层。
|
* 会员基础配置 服务层。
|
||||||
|
|
@ -23,6 +21,7 @@ import java.util.ArrayList;
|
||||||
public interface TbMemberConfigService extends IService<TbMemberConfig> {
|
public interface TbMemberConfigService extends IService<TbMemberConfig> {
|
||||||
|
|
||||||
MemberConfigVO detail(Long shopId);
|
MemberConfigVO detail(Long shopId);
|
||||||
|
UMemberConfigVO detail(Long shopId, Long userId);
|
||||||
|
|
||||||
Boolean edit(Long shopId, MemberConfigDTO memberDTO);
|
Boolean edit(Long shopId, MemberConfigDTO memberDTO);
|
||||||
|
|
||||||
|
|
@ -48,4 +47,13 @@ public interface TbMemberConfigService extends IService<TbMemberConfig> {
|
||||||
*/
|
*/
|
||||||
boolean deliver(Long shopId, Long userId, TableValueConstant.MemberExpFlow.Type type, BigDecimal money, Integer expVal, Long sourceId);
|
boolean deliver(Long shopId, Long userId, TableValueConstant.MemberExpFlow.Type type, BigDecimal money, Integer expVal, Long sourceId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户会员列表
|
||||||
|
*/
|
||||||
|
List<MemberListVO> getMemberList(Long userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户会员详情
|
||||||
|
*/
|
||||||
|
MemberDetailVO getUserDetail(Long userId, Long shopId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
package com.czg.market.vo;
|
||||||
|
|
||||||
|
import com.czg.account.entity.ShopInfo;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class MemberDetailVO implements Serializable {
|
||||||
|
/**
|
||||||
|
* 店铺信息
|
||||||
|
*/
|
||||||
|
private ShopInfo shopInfo;
|
||||||
|
/**
|
||||||
|
* 当前会员等级信息
|
||||||
|
*/
|
||||||
|
private MemberLevelVO memberLevel;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 距离下一等级经验值
|
||||||
|
*/
|
||||||
|
private Long nextExperienceValue;
|
||||||
|
/**
|
||||||
|
* 当前经验值
|
||||||
|
*/
|
||||||
|
private Long experience;
|
||||||
|
/**
|
||||||
|
* 到期时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime endTime;
|
||||||
|
}
|
||||||
|
|
@ -84,5 +84,8 @@ public class MemberLevelVO implements Serializable {
|
||||||
*/
|
*/
|
||||||
private LocalDateTime updateTime;
|
private LocalDateTime updateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否消费增积分
|
||||||
|
*/
|
||||||
private Integer isCostRewardPoints;
|
private Integer isCostRewardPoints;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.czg.market.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class MemberListVO implements Serializable {
|
||||||
|
private String logo;
|
||||||
|
private Long shopId;
|
||||||
|
private String shopName;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
package com.czg.market.vo;
|
||||||
|
|
||||||
|
import com.czg.market.dto.MemberConfigDTO;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
import jakarta.validation.constraints.DecimalMin;
|
||||||
|
import jakarta.validation.constraints.Min;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class UMemberConfigVO implements Serializable {
|
||||||
|
/**
|
||||||
|
* 店铺会员配置信息
|
||||||
|
*/
|
||||||
|
private MemberConfigVO memberConfig;
|
||||||
|
/**
|
||||||
|
* kv形式,BIND_PHONE绑定手机号 ORDER订单数 COST_AMOUNT消费金额 RECHARGE_AMOUNT充值金额, true满足 false不满足
|
||||||
|
*/
|
||||||
|
private Map<String, Object> conditionMap;
|
||||||
|
}
|
||||||
|
|
@ -27,6 +27,7 @@ import com.mybatisflex.core.paginate.Page;
|
||||||
import com.mybatisflex.core.query.QueryWrapper;
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.apache.dubbo.config.annotation.DubboReference;
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
|
import org.apache.dubbo.config.annotation.DubboService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
|
@ -39,7 +40,7 @@ import java.math.BigDecimal;
|
||||||
* @author Administrator
|
* @author Administrator
|
||||||
* @since 2025-02-08
|
* @since 2025-02-08
|
||||||
*/
|
*/
|
||||||
@Service
|
@DubboService
|
||||||
public class AShopUserServiceImpl implements AShopUserService {
|
public class AShopUserServiceImpl implements AShopUserService {
|
||||||
@Resource
|
@Resource
|
||||||
private ShopUserService shopUserService;
|
private ShopUserService shopUserService;
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,11 @@ import com.mybatisflex.core.paginate.Page;
|
||||||
import com.mybatisflex.core.query.QueryWrapper;
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.apache.dubbo.config.annotation.DubboReference;
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
|
import org.apache.dubbo.config.annotation.DubboService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -41,7 +43,7 @@ import java.util.List;
|
||||||
* @author Administrator
|
* @author Administrator
|
||||||
* @since 2025-02-08
|
* @since 2025-02-08
|
||||||
*/
|
*/
|
||||||
@Service
|
@DubboService
|
||||||
public class UShopUserServiceImpl implements UShopUserService {
|
public class UShopUserServiceImpl implements UShopUserService {
|
||||||
@Resource
|
@Resource
|
||||||
private ShopUserService shopUserService;
|
private ShopUserService shopUserService;
|
||||||
|
|
@ -180,19 +182,18 @@ public class UShopUserServiceImpl implements UShopUserService {
|
||||||
BeanUtil.copyProperties(shopUserAddDTO, shopUser, "accountPoints", "amount");
|
BeanUtil.copyProperties(shopUserAddDTO, shopUser, "accountPoints", "amount");
|
||||||
BeanUtil.copyProperties(shopUserAddDTO, userInfo);
|
BeanUtil.copyProperties(shopUserAddDTO, userInfo);
|
||||||
userInfoService.updateById(userInfo);
|
userInfoService.updateById(userInfo);
|
||||||
|
if (StrUtil.isBlank(shopUser.getCode())) {
|
||||||
if ((shopUser.getIsVip() == null || shopUser.getIsVip() != 1) && shopUser.getId() != null) {
|
shopUser.setCode(generateCode(shopId));
|
||||||
|
}
|
||||||
|
if (shopUser.getId() != null) {
|
||||||
shopUser.setIsVip(1);
|
shopUser.setIsVip(1);
|
||||||
if (StrUtil.isBlank(shopUser.getCode())) {
|
|
||||||
shopUser.setCode(generateCode(shopId));
|
|
||||||
}
|
|
||||||
shopUser.setJoinTime(DateUtil.date().toLocalDateTime());
|
|
||||||
shopUser.setUserId(null);
|
shopUser.setUserId(null);
|
||||||
shopUser.setSourceShopId(shopId);
|
shopUser.setSourceShopId(shopId);
|
||||||
shopUser.setMainShopId(mainId);
|
shopUser.setMainShopId(mainId);
|
||||||
}
|
}
|
||||||
|
shopUser.setJoinTime(shopUser.getJoinTime() == null ? DateUtil.date().toLocalDateTime() : shopUser.getJoinTime());
|
||||||
|
|
||||||
|
|
||||||
memberConfigService.joinMember(shopId, userId, null);
|
|
||||||
return shopUserService.saveOrUpdate(shopUser);
|
return shopUserService.saveOrUpdate(shopUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@ import jakarta.annotation.Resource;
|
||||||
import org.apache.dubbo.config.annotation.DubboReference;
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
import org.apache.dubbo.config.annotation.DubboService;
|
import org.apache.dubbo.config.annotation.DubboService;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 服务层实现。
|
* 服务层实现。
|
||||||
*
|
*
|
||||||
|
|
@ -51,7 +53,6 @@ public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> i
|
||||||
userInfoDTO.setAssetsSummary(assetsSummaryDTO);
|
userInfoDTO.setAssetsSummary(assetsSummaryDTO);
|
||||||
return userInfoDTO;
|
return userInfoDTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean updateInfo(long shopId, long userId, UserInfoEditDTO userInfoEditDTO) {
|
public Boolean updateInfo(long shopId, long userId, UserInfoEditDTO userInfoEditDTO) {
|
||||||
UserInfo userInfo = getById(userId);
|
UserInfo userInfo = getById(userId);
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,13 @@ package com.czg.service.market.service.impl;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
|
import com.czg.account.dto.shopuser.ShopUserAddDTO;
|
||||||
import com.czg.account.entity.ShopUser;
|
import com.czg.account.entity.ShopUser;
|
||||||
|
import com.czg.account.service.*;
|
||||||
import com.czg.market.dto.MemberConfigDTO;
|
import com.czg.market.dto.MemberConfigDTO;
|
||||||
import com.czg.account.entity.ShopInfo;
|
import com.czg.account.entity.ShopInfo;
|
||||||
import com.czg.account.entity.UserInfo;
|
import com.czg.account.entity.UserInfo;
|
||||||
import com.czg.account.service.ShopInfoService;
|
|
||||||
import com.czg.account.service.ShopUserService;
|
|
||||||
import com.czg.market.service.TbMemberConfigService;
|
import com.czg.market.service.TbMemberConfigService;
|
||||||
import com.czg.account.service.UserInfoService;
|
|
||||||
import com.czg.market.vo.MemberConfigVO;
|
import com.czg.market.vo.MemberConfigVO;
|
||||||
import com.czg.exception.CzgException;
|
import com.czg.exception.CzgException;
|
||||||
import com.czg.market.dto.MemberOrderDTO;
|
import com.czg.market.dto.MemberOrderDTO;
|
||||||
|
|
@ -45,6 +44,8 @@ public class MemberOrderServiceImpl extends ServiceImpl<MemberOrderMapper, Membe
|
||||||
@DubboReference
|
@DubboReference
|
||||||
private UserInfoService userInfoService;
|
private UserInfoService userInfoService;
|
||||||
@DubboReference
|
@DubboReference
|
||||||
|
private UShopUserService uShopUserService;
|
||||||
|
@DubboReference
|
||||||
private ShopUserService shopUserService;
|
private ShopUserService shopUserService;
|
||||||
@DubboReference
|
@DubboReference
|
||||||
private TbMemberConfigService memberConfigService;
|
private TbMemberConfigService memberConfigService;
|
||||||
|
|
@ -58,30 +59,53 @@ public class MemberOrderServiceImpl extends ServiceImpl<MemberOrderMapper, Membe
|
||||||
ShopInfo shopInfo = shopInfoService.getById(orderDTO.getShopId());
|
ShopInfo shopInfo = shopInfoService.getById(orderDTO.getShopId());
|
||||||
AssertUtil.isNull(shopInfo, "生成订单失败,店铺信息不存在");
|
AssertUtil.isNull(shopInfo, "生成订单失败,店铺信息不存在");
|
||||||
|
|
||||||
if (orderDTO.getUserId() != null) {
|
UserInfo userInfo = userInfoService.getById(orderDTO.getUserId());
|
||||||
UserInfo userInfo = userInfoService.getById(orderDTO.getUserId());
|
AssertUtil.isNull(userInfo, "生成订单失败,用户信息不存在");
|
||||||
AssertUtil.isNull(userInfo, "生成订单失败,用户信息不存在");
|
|
||||||
}
|
|
||||||
|
|
||||||
ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getSourceShopId, orderDTO.getShopId()).eq(ShopUser::getUserId, orderDTO.getUserId()));
|
|
||||||
AssertUtil.isNull(shopUser, "生成订单失败,用户信息不存在");
|
|
||||||
|
|
||||||
|
|
||||||
MemberConfigVO memberConfigVO = memberConfigService.detail(shopInfo.getId());
|
MemberConfigVO memberConfigVO = memberConfigService.detail(shopInfo.getId());
|
||||||
if(memberConfigVO.getConfigList() == null || memberConfigVO.getConfigList().isEmpty()) {
|
|
||||||
throw new CzgException("会员开通方案未配置,请联系店铺");
|
if (memberConfigVO.getIsSubmitInfo() == 1) {
|
||||||
|
AssertUtil.isBlank(orderDTO.getBirthDay(), "生日不能为空");
|
||||||
|
AssertUtil.isBlank(orderDTO.getNickName(), "名称不能为空");
|
||||||
|
AssertUtil.isNull(orderDTO.getSex(), "性别不能为空");
|
||||||
|
|
||||||
|
userInfo.setSex(orderDTO.getSex());
|
||||||
|
userInfo.setNickName(orderDTO.getNickName());
|
||||||
|
userInfo.setBirthDay(orderDTO.getBirthDay());
|
||||||
|
}
|
||||||
|
|
||||||
|
ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getUserId, orderDTO.getUserId()).eq(ShopUser::getSourceShopId, orderDTO.getShopId()));
|
||||||
|
if (shopUser == null) {
|
||||||
|
uShopUserService.join(orderDTO.getShopId(), orderDTO.getUserId(), new ShopUserAddDTO()
|
||||||
|
.setPhone(userInfo.getPhone())
|
||||||
|
.setSex(userInfo.getSex())
|
||||||
|
.setHeadImg(userInfo.getHeadImg())
|
||||||
|
.setAmount(BigDecimal.ZERO)
|
||||||
|
.setBirthDay(userInfo.getBirthDay())
|
||||||
|
.setIsVip(0)
|
||||||
|
.setAccountPoints(0)
|
||||||
|
.setNickName(userInfo.getNickName())
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
MemberConfigDTO.ConfigList configItem = memberConfigVO.getConfigList().stream()
|
|
||||||
.filter(item -> item.getName().equals(orderDTO.getName()))
|
|
||||||
.findFirst()
|
|
||||||
.orElseThrow(() -> new CzgException("会员开通方案未配置,请联系店铺"));
|
|
||||||
|
|
||||||
if ("PAY".equals(memberConfigVO.getOpenType())){
|
if ("PAY".equals(memberConfigVO.getOpenType())){
|
||||||
|
if(memberConfigVO.getConfigList() == null || memberConfigVO.getConfigList().isEmpty()) {
|
||||||
|
throw new CzgException("会员开通方案未配置,请联系店铺");
|
||||||
|
}
|
||||||
|
AssertUtil.isBlank(orderDTO.getName(), "方案名称不能为空");
|
||||||
|
AssertUtil.isNull(orderDTO.getNum(), "开通周期数不为空");
|
||||||
|
|
||||||
|
MemberConfigDTO.ConfigList configItem = memberConfigVO.getConfigList().stream()
|
||||||
|
.filter(item -> item.getName().equals(orderDTO.getName()))
|
||||||
|
.findFirst()
|
||||||
|
.orElseThrow(() -> new CzgException("会员开通方案未配置,请联系店铺"));
|
||||||
|
|
||||||
//生成订单
|
//生成订单
|
||||||
MemberOrder orderInfo = new MemberOrder();
|
MemberOrder orderInfo = new MemberOrder();
|
||||||
|
|
||||||
orderInfo.setOrderNo(orderDTO.getPlatformType() + IdUtil.getSnowflakeNextId());
|
orderInfo.setOrderNo(orderDTO.getPlatformType() + "ME" + IdUtil.getSnowflakeNextId());
|
||||||
orderInfo.setShopId(orderDTO.getShopId());
|
orderInfo.setShopId(orderDTO.getShopId());
|
||||||
orderInfo.setPayAmount(BigDecimal.ZERO);
|
orderInfo.setPayAmount(BigDecimal.ZERO);
|
||||||
orderInfo.setStatus(OrderStatusEnums.UNPAID.getCode());
|
orderInfo.setStatus(OrderStatusEnums.UNPAID.getCode());
|
||||||
|
|
|
||||||
|
|
@ -14,14 +14,11 @@ import com.czg.account.entity.*;
|
||||||
import com.czg.account.service.*;
|
import com.czg.account.service.*;
|
||||||
import com.czg.market.entity.*;
|
import com.czg.market.entity.*;
|
||||||
import com.czg.market.service.*;
|
import com.czg.market.service.*;
|
||||||
import com.czg.market.vo.MemberConfigVO;
|
import com.czg.market.vo.*;
|
||||||
import com.czg.market.vo.MemberLevelVO;
|
|
||||||
import com.czg.exception.ApiNotPrintException;
|
|
||||||
import com.czg.order.entity.OrderInfo;
|
import com.czg.order.entity.OrderInfo;
|
||||||
import com.czg.order.entity.OrderPayment;
|
import com.czg.order.entity.OrderPayment;
|
||||||
import com.czg.order.service.OrderInfoService;
|
import com.czg.order.service.OrderInfoService;
|
||||||
import com.czg.order.service.OrderPaymentService;
|
import com.czg.order.service.OrderPaymentService;
|
||||||
import com.czg.sa.StpKit;
|
|
||||||
import com.czg.service.market.enums.OrderStatusEnums;
|
import com.czg.service.market.enums.OrderStatusEnums;
|
||||||
import com.czg.service.market.mapper.TbMemberConfigMapper;
|
import com.czg.service.market.mapper.TbMemberConfigMapper;
|
||||||
import com.czg.utils.AssertUtil;
|
import com.czg.utils.AssertUtil;
|
||||||
|
|
@ -36,9 +33,8 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
import java.util.stream.Collectors;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员基础配置 服务层实现。
|
* 会员基础配置 服务层实现。
|
||||||
|
|
@ -69,6 +65,8 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||||
private MemberExpFlowService memberExpFlowService;
|
private MemberExpFlowService memberExpFlowService;
|
||||||
@Resource
|
@Resource
|
||||||
private MkShopCouponRecordService shopCouponRecordService;
|
private MkShopCouponRecordService shopCouponRecordService;
|
||||||
|
@DubboReference
|
||||||
|
private ShopInfoService shopInfoService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MemberConfigVO detail(Long shopId) {
|
public MemberConfigVO detail(Long shopId) {
|
||||||
|
|
@ -96,6 +94,48 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||||
return memberConfigVO;
|
return memberConfigVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UMemberConfigVO detail(Long shopId, Long userId) {
|
||||||
|
MemberConfigVO memberConfigVO = detail(shopId);
|
||||||
|
ShopUser shopUserInfo = shopUserService.getShopUserInfo(shopId, userId);
|
||||||
|
HashMap<String, Object> conditionMap = new HashMap<>();
|
||||||
|
UMemberConfigVO configVO = new UMemberConfigVO();
|
||||||
|
configVO.setMemberConfig(memberConfigVO);
|
||||||
|
configVO.setConditionMap(conditionMap);
|
||||||
|
if (memberConfigVO.getConditionList() != null) {
|
||||||
|
for (MemberConfigDTO.condition item : memberConfigVO.getConditionList()) {
|
||||||
|
switch (item.getCode()) {
|
||||||
|
case "BIND_PHONE":
|
||||||
|
conditionMap.put("BIND_PHONE", StrUtil.isNotBlank(shopUserInfo.getPhone()));
|
||||||
|
break;
|
||||||
|
case "ORDER":
|
||||||
|
conditionMap.put("ORDER", orderInfoService.count(new QueryWrapper().eq(OrderInfo::getShopId, shopUserInfo.getSourceShopId()).eq(OrderInfo::getUserId, shopUserInfo.getUserId())
|
||||||
|
.notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode())) >= Integer.parseInt(item.getValue()));
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "COST_AMOUNT":
|
||||||
|
conditionMap.put("BIND_PHONE", orderInfoService.list(new QueryWrapper().eq(OrderInfo::getShopId, shopUserInfo.getSourceShopId()).eq(OrderInfo::getUserId, shopUserInfo.getUserId())
|
||||||
|
.notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode()))
|
||||||
|
.stream().map(OrderInfo::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(new BigDecimal(item.getValue())) >= 0);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "RECHARGE_AMOUNT":
|
||||||
|
conditionMap.put("BIND_PHONE", paymentService.list(new QueryWrapper().eq(OrderPayment::getShopId, shopUserInfo.getSourceShopId())
|
||||||
|
.eq(OrderPayment::getSourceId, shopUserInfo.getId()).isNotNull(OrderPayment::getTradeNumber))
|
||||||
|
.stream().map(OrderPayment::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(new BigDecimal(item.getValue())) >= 0);
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new CzgException("会员开通条件类型错误");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return configVO;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean edit(Long shopId, MemberConfigDTO memberDTO) {
|
public Boolean edit(Long shopId, MemberConfigDTO memberDTO) {
|
||||||
TbMemberConfig memberConfig = getOne(new QueryWrapper().eq(TbMemberConfig::getShopId, shopId));
|
TbMemberConfig memberConfig = getOne(new QueryWrapper().eq(TbMemberConfig::getShopId, shopId));
|
||||||
|
|
@ -317,10 +357,6 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||||
|
|
||||||
// 条件开通
|
// 条件开通
|
||||||
if (memberOrderId == null) {
|
if (memberOrderId == null) {
|
||||||
if (memberConfigVO.getConfigList() == null || memberConfigVO.getConfigList().isEmpty()) {
|
|
||||||
throw new CzgException("会员开通方案未配置,请联系店铺");
|
|
||||||
}
|
|
||||||
|
|
||||||
AssertUtil.isTrue(!"CONDITION".equals(memberConfigVO.getOpenType()), "开通方式未开启");
|
AssertUtil.isTrue(!"CONDITION".equals(memberConfigVO.getOpenType()), "开通方式未开启");
|
||||||
|
|
||||||
for (MemberConfigDTO.condition item : memberConfigVO.getConditionList()) {
|
for (MemberConfigDTO.condition item : memberConfigVO.getConditionList()) {
|
||||||
|
|
@ -328,15 +364,15 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||||
case "BIND_PHONE" -> StrUtil.isNotBlank(shopUser.getPhone());
|
case "BIND_PHONE" -> StrUtil.isNotBlank(shopUser.getPhone());
|
||||||
case "ORDER" ->
|
case "ORDER" ->
|
||||||
orderInfoService.count(new QueryWrapper().eq(OrderInfo::getShopId, shopUser.getSourceShopId()).eq(OrderInfo::getUserId, shopUser.getUserId())
|
orderInfoService.count(new QueryWrapper().eq(OrderInfo::getShopId, shopUser.getSourceShopId()).eq(OrderInfo::getUserId, shopUser.getUserId())
|
||||||
.notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode())) > Integer.parseInt(item.getValue());
|
.notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode())) >= Integer.parseInt(item.getValue());
|
||||||
case "COST_AMOUNT" ->
|
case "COST_AMOUNT" ->
|
||||||
orderInfoService.list(new QueryWrapper().eq(OrderInfo::getShopId, shopUser.getSourceShopId()).eq(OrderInfo::getUserId, shopUser.getUserId())
|
orderInfoService.list(new QueryWrapper().eq(OrderInfo::getShopId, shopUser.getSourceShopId()).eq(OrderInfo::getUserId, shopUser.getUserId())
|
||||||
.notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode()))
|
.notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode()))
|
||||||
.stream().map(OrderInfo::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(new BigDecimal(item.getValue())) > 0;
|
.stream().map(OrderInfo::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(new BigDecimal(item.getValue())) >= 0;
|
||||||
case "RECHARGE_AMOUNT" ->
|
case "RECHARGE_AMOUNT" ->
|
||||||
paymentService.list(new QueryWrapper().eq(OrderPayment::getShopId, shopUser.getSourceShopId())
|
paymentService.list(new QueryWrapper().eq(OrderPayment::getShopId, shopUser.getSourceShopId())
|
||||||
.eq(OrderPayment::getSourceId, shopUser.getId()).isNotNull(OrderPayment::getTradeNumber))
|
.eq(OrderPayment::getSourceId, shopUser.getId()).isNotNull(OrderPayment::getTradeNumber))
|
||||||
.stream().map(OrderPayment::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(new BigDecimal(item.getValue())) > 0;
|
.stream().map(OrderPayment::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(new BigDecimal(item.getValue())) >= 0;
|
||||||
default -> throw new CzgException("会员开通条件类型错误");
|
default -> throw new CzgException("会员开通条件类型错误");
|
||||||
};
|
};
|
||||||
if (!canOpen) {
|
if (!canOpen) {
|
||||||
|
|
@ -344,15 +380,18 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DateUtil.isIn(DateUtil.date(), DateUtil.date(shopUser.getStartTime()), DateUtil.date(shopUser.getEndTime()))) {
|
if (shopUser.getStartTime() != null && shopUser.getEndTime() != null && DateUtil.isIn(DateUtil.date(), DateUtil.date(shopUser.getStartTime()), DateUtil.date(shopUser.getEndTime()))) {
|
||||||
throw new ApiNotPrintException("您已经是会员");
|
throw new ApiNotPrintException("您已经是会员");
|
||||||
}
|
}
|
||||||
shopUser.setMemberLevelId(levelConfig.getId());
|
shopUser.setMemberLevelId(levelConfig.getId());
|
||||||
shopUser.setStartTime(DateUtil.date().toLocalDateTime());
|
shopUser.setStartTime(DateUtil.date().toLocalDateTime());
|
||||||
|
|
||||||
// shopUser.setEndTime(shopUser.getStartTime().plusDays(30));
|
shopUser.setEndTime(shopUser.getStartTime().plusDays(20000));
|
||||||
// 购买开通
|
// 购买开通
|
||||||
} else {
|
} else {
|
||||||
|
if (memberConfigVO.getConfigList() == null || memberConfigVO.getConfigList().isEmpty()) {
|
||||||
|
throw new CzgException("会员开通方案未配置,请联系店铺");
|
||||||
|
}
|
||||||
|
|
||||||
if (shopUser.getStartTime() == null || shopUser.getEndTime().isBefore(DateUtil.date().toLocalDateTime())) {
|
if (shopUser.getStartTime() == null || shopUser.getEndTime().isBefore(DateUtil.date().toLocalDateTime())) {
|
||||||
shopUser.setStartTime(DateUtil.date().toLocalDateTime());
|
shopUser.setStartTime(DateUtil.date().toLocalDateTime());
|
||||||
|
|
@ -415,4 +454,40 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
|
||||||
shopUser.setIsVip(1);
|
shopUser.setIsVip(1);
|
||||||
return shopUserService.updateById(shopUser);
|
return shopUserService.updateById(shopUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MemberListVO> getMemberList(Long userId) {
|
||||||
|
List<ShopUser> shopUsers = shopUserService.list(new QueryWrapper().eq(ShopUser::getUserId, userId));
|
||||||
|
Set<Long> shopIdList = shopUsers.stream().map(ShopUser::getSourceShopId).collect(Collectors.toSet());
|
||||||
|
Map<Long, ShopInfo> shopInfoMap = shopInfoService.list(new QueryWrapper().in(ShopInfo::getId, shopIdList)).stream().collect(Collectors.toMap(ShopInfo::getId, item -> item));
|
||||||
|
ArrayList<MemberListVO> memberListVOS = new ArrayList<>();
|
||||||
|
shopUsers.forEach(shopUser -> {
|
||||||
|
if (shopUser.getStartTime() != null && shopUser.getEndTime() != null && DateUtil.isIn(DateUtil.date(), DateUtil.date(shopUser.getStartTime()), DateUtil.date(shopUser.getEndTime()))) {
|
||||||
|
ShopInfo shopInfo = shopInfoMap.getOrDefault(shopUser.getSourceShopId(), new ShopInfo());
|
||||||
|
memberListVOS.add(new MemberListVO().setShopName(shopInfo.getShopName())
|
||||||
|
.setShopId(shopInfo.getId())
|
||||||
|
.setLogo(shopInfo.getLogo()));
|
||||||
|
}else {
|
||||||
|
shopUser.setIsVip(0);
|
||||||
|
shopUserService.updateById(shopUser);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return memberListVOS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MemberDetailVO getUserDetail(Long userId, Long shopId) {
|
||||||
|
ShopUser shopUser = shopUserService.getOne(new QueryWrapper().eq(ShopUser::getUserId, userId).eq(ShopUser::getSourceShopId, shopId));
|
||||||
|
ShopInfo shopInfo = shopInfoService.getById(shopUser.getSourceShopId());
|
||||||
|
MemberLevelVO levelVO = levelConfigService.detail(shopUser.getMemberLevelId());
|
||||||
|
MemberLevelConfig nextLevel = levelConfigService.getOne(new QueryWrapper().eq(MemberLevelConfig::getShopId, shopId).ge(MemberLevelConfig::getExperienceValue, shopUser.getExperience())
|
||||||
|
.ne(MemberLevelConfig::getId, shopUser.getId()).orderBy(MemberLevelConfig::getExperienceValue, true));
|
||||||
|
return new MemberDetailVO()
|
||||||
|
.setShopInfo(shopInfo)
|
||||||
|
.setMemberLevel(levelVO)
|
||||||
|
.setExperience(shopUser.getExperience())
|
||||||
|
.setEndTime(shopUser.getEndTime())
|
||||||
|
.setNextExperienceValue(nextLevel.getExperienceValue() - shopUser.getExperience());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue