src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java
@@ -397,9 +397,7 @@ public FebsResponse memberAdd(MallMember member) { RegisterDto registerDto = new RegisterDto(); registerDto.setAccount(member.getAccount()); registerDto.setRegistType("admin"); registerDto.setPassword("a123456"); registerDto.setInviteId(member.getInviteId()); apiMallMemberService.register(registerDto); return new FebsResponse().success(); } src/main/java/cc/mrbird/febs/mall/controller/ApiApplyController.java
File was deleted src/main/java/cc/mrbird/febs/mall/controller/ApiLoginController.java
File was deleted src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java
File was deleted src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java
File was deleted src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
File was deleted src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
@@ -1,6 +1,8 @@ package cc.mrbird.febs.mall.controller; import cc.mrbird.febs.common.annotation.Limit; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.LimitType; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.service.IApiMallOrderInfoService; import cc.mrbird.febs.mall.vo.OrderDetailVo; @@ -27,7 +29,7 @@ @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/order") @Api(value = "ApiMallOrderController", tags = "订单接口类") @Api(value = "ApiMallOrderController", tags = "DS-订单接口类") public class ApiMallOrderController { private final IApiMallOrderInfoService mallOrderInfoService; @@ -35,26 +37,23 @@ @ApiOperation(value = "创建订单--验证是否允许创建", notes = "创建订单--验证是否允许创建") @PostMapping(value = "/createOrderVerify") @Limit(key = "createOrderVerify", period = 5, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse createOrderVerify(@RequestBody ApiCreateOrderVerifyDto apiCreateOrderVerifyDto) { return mallOrderInfoService.createOrderVerify(apiCreateOrderVerifyDto); } @ApiOperation(value = "选择优惠卷", notes = "选择优惠卷") @PostMapping(value = "/chooseCoupon") public FebsResponse chooseCoupon(@RequestBody ApiChooseCouponDto chooseCouponDto) { return mallOrderInfoService.chooseCoupon(chooseCouponDto); } @ApiOperation(value = "创建订单", notes = "创建订单") @PostMapping(value = "/createOrder") public FebsResponse createOrder(@RequestBody AddOrderDto addOrderDto) { @Limit(key = "createOrder", period = 5, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse createOrder(@RequestBody @Validated AddOrderDto addOrderDto) { Long orderId = mallOrderInfoService.createOrder(addOrderDto); return new FebsResponse().success().data(orderId).message("创建订单成功"); return new FebsResponse().success().data(orderId).message("Order successfully created"); } @ApiOperation(value = "取消订单", notes = "取消订单") @PostMapping(value = "/cancelOrder/{id}") @Limit(key = "cancelOrder", period = 5, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse cancelOrder(@PathVariable("id") Long id) { mallOrderInfoService.cancelOrder(id); return new FebsResponse().success(); src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiLoginController.java
New file @@ -0,0 +1,60 @@ package cc.mrbird.febs.mall.controller.dependentStation; import cc.mrbird.febs.common.annotation.Limit; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.LimitType; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.service.IApiMallMemberService; import cc.mrbird.febs.pay.model.WxGenerateQrCodeDto; import cc.mrbird.febs.pay.service.IXcxPayService; import cc.mrbird.febs.pay.util.WechatConfigure; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Dictionary; import java.util.HashMap; import java.util.Map; /** * @author wzy * @date 2021-09-16 **/ @Slf4j @CrossOrigin("*") @RequiredArgsConstructor @RestController @RequestMapping(value = "/api/login") @Api(value = "ApiLoginController", tags = "DS-登录注册类") public class ApiLoginController { private final IApiMallMemberService memberService; @ApiOperation(value = "app注册接口", notes = "app注册接口") @PostMapping(value = "/register") @Limit(key = "register", period = 5, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse register(@RequestBody @Validated RegisterDto registerDto) { return memberService.register(registerDto); } @ApiOperation(value = "账号密码登录接口", notes = "账号密码登录接口") @PostMapping(value = "/toLogin") @Limit(key = "toLogin", period = 5, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse login(@RequestBody @Validated LoginDto loginDto) { return memberService.toLogin(loginDto); } } src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiMallAddressInfoController.java
New file @@ -0,0 +1,54 @@ package cc.mrbird.febs.mall.controller.dependentStation; import cc.mrbird.febs.common.annotation.Limit; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.LimitType; import cc.mrbird.febs.mall.conversion.MallAddressInfoConversion; import cc.mrbird.febs.mall.dto.AddressInfoDto; import cc.mrbird.febs.mall.dto.ApiIdentifyAddressDto; import cc.mrbird.febs.mall.entity.MallAddressInfo; import cc.mrbird.febs.mall.service.IApiMallAddressInfoService; import cc.mrbird.febs.mall.vo.AddressInfoVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; /** * @author wzy * @date 2021-09-18 **/ @Slf4j @Validated @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/address") @Api(value = "ApiMallAddressInfoController", tags = "DS-用户地址管理接口类") public class ApiMallAddressInfoController { private final IApiMallAddressInfoService mallAddressInfoService; @ApiOperation(value = "获取地址信息", notes = "获取地址信息") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = AddressInfoVo.class) }) @GetMapping(value = "/findAddressInfo") public FebsResponse findAddressInfo() { return mallAddressInfoService.findAddressInfo(); } @ApiOperation(value = "修改地址", notes = "修改地址") @PostMapping(value = "/modifyAddress") @Limit(key = "modifyAddress", period = 5, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse modifyAddress(@RequestBody @Validated AddressInfoDto addressInfoDto) { return mallAddressInfoService.modifyAddress(addressInfoDto); } } src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiMallGoodsCategoryController.java
File was renamed from src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsCategoryController.java @@ -1,4 +1,4 @@ package cc.mrbird.febs.mall.controller; package cc.mrbird.febs.mall.controller.dependentStation; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.service.IApiMallGoodsCategoryService; @@ -24,7 +24,7 @@ @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/category") @Api(value = "ApiMallGoodsCategoryController", tags = "商品分类参数接收类") @Api(value = "ApiMallGoodsCategoryController", tags = "DS-商品分类参数接收类") public class ApiMallGoodsCategoryController { private final IApiMallGoodsCategoryService mallGoodsCategoryService; src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiMallGoodsController.java
File was renamed from src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java @@ -1,6 +1,8 @@ package cc.mrbird.febs.mall.controller; package cc.mrbird.febs.mall.controller.dependentStation; import cc.mrbird.febs.common.annotation.Limit; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.LimitType; import cc.mrbird.febs.mall.dto.ApiMallGoodsCommentDto; import cc.mrbird.febs.mall.dto.MallGoodsQueryDto; import cc.mrbird.febs.mall.service.IApiMallGoodsService; @@ -23,7 +25,7 @@ @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/goods") @Api(value = "ApiMallGoodsController", tags = "商城商品接口类") @Api(value = "ApiMallGoodsController", tags = "DS-商城商品接口类") public class ApiMallGoodsController { private final IApiMallGoodsService mallGoodsService; @@ -32,6 +34,7 @@ @ApiResponse(code = 200, message = "success", response = MallGoodsListVo.class) }) @PostMapping(value = "/findMallGoodsList") @Limit(key = "findMallGoodsList", period = 5, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse findMallGoodsList(@RequestBody MallGoodsQueryDto queryDto) { return new FebsResponse().success().data(mallGoodsService.findMallGoodsListInPage(queryDto)); } src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiMallMemberController.java
New file @@ -0,0 +1,78 @@ package cc.mrbird.febs.mall.controller.dependentStation; import cc.mrbird.febs.common.annotation.Limit; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.LimitType; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.entity.MallMemberCoupon; import cc.mrbird.febs.mall.entity.MallMemberPayment; import cc.mrbird.febs.mall.service.*; import cc.mrbird.febs.mall.vo.*; import cc.mrbird.febs.vip.service.IMallVipBenefitsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.Map; /** * @author wzy * @date 2021-09-16 **/ @Slf4j @RestController @RequestMapping(value = "/api/member") @RequiredArgsConstructor @Api(value = "ApiMallMemberController", tags = "DS-商城用户接口类") public class ApiMallMemberController { private final IApiMallMemberService memberService; @ApiOperation(value = "获取用户信息", notes = "获取用户信息") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = MallMemberVo.class) }) @GetMapping(value = "/findMemberInfo") public FebsResponse findMemberInfo() { return memberService.findMemberInfo(); } @ApiOperation(value = "注销", notes = "注销") @PostMapping(value = "/logout") @Limit(key = "logout", period = 5, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse logout() { return memberService.logout(); } @ApiOperation(value = "编辑个人信息", notes = "编辑个人信息") @PostMapping(value = "/modifyInfo") @Limit(key = "modifyInfo", period = 5, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse modifyInfo(@RequestBody @Validated ModifyMemberInfoDto modifyMemberInfoDto) { return memberService.modifyMemberInfo(modifyMemberInfoDto); } @ApiOperation(value = "更改密码", notes = "更改密码") @PostMapping(value = "/forgetPwd") @Limit(key = "forgetPwd", period = 5, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse forgetPwd(@RequestBody @Validated ForgetPwdDto forgetPwdDto) { return memberService.forgetPwd(forgetPwdDto); } @ApiOperation(value = "我的售后服务", notes = "我的售后服务") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = MallSalesServiceVo.class) }) @GetMapping(value = "/salesService") public FebsResponse salesService() { return memberService.salesService(); } } src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiMallShoppingCartController.java
File was renamed from src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java @@ -1,6 +1,8 @@ package cc.mrbird.febs.mall.controller; package cc.mrbird.febs.mall.controller.dependentStation; import cc.mrbird.febs.common.annotation.Limit; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.LimitType; import cc.mrbird.febs.mall.dto.AddCartDto; import cc.mrbird.febs.mall.dto.DelCartGoodsDto; import cc.mrbird.febs.mall.dto.GoodsCntDto; @@ -28,7 +30,7 @@ @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/cart") @Api(value = "ApiMallShoppingCartController", tags = "商城购物车接口请求类") @Api(value = "ApiMallShoppingCartController", tags = "DS-购物车") public class ApiMallShoppingCartController { private final IApiMallShoppingCartService mallShoppingCartService; @@ -44,14 +46,16 @@ @ApiOperation(value = "添加商品到购物车", notes = "添加商品到购物车") @PostMapping(value = "/addGoodsToCart") public FebsResponse addGoodsToCart(@RequestBody List<AddCartDto> addCartDto) { @Limit(key = "addGoodsToCart", period = 1, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse addGoodsToCart(@RequestBody @Validated List<AddCartDto> addCartDto) { mallShoppingCartService.addGoodsToCart(addCartDto); return new FebsResponse().success().data("添加成功"); } @ApiOperation(value = "从购物车中删除商品", notes = "从购物车中删除商品") @PostMapping(value = "/delGoods") public FebsResponse delGoods(@RequestBody DelCartGoodsDto delCartGoodsDto) { @Limit(key = "delGoods", period = 1, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse delGoods(@RequestBody @Validated DelCartGoodsDto delCartGoodsDto) { List<String> ids = StrUtil.split(delCartGoodsDto.getIds(), ','); mallShoppingCartService.removeByIds(ids); return new FebsResponse().success().data("删除成功"); @@ -59,7 +63,8 @@ @ApiOperation(value = "修改购物车商品数量", notes = "修改购物车商品数量") @PostMapping(value = "/goodsCnt") public FebsResponse goodsCnt(@RequestBody GoodsCntDto goodsCntDto) { @Limit(key = "goodsCnt", period = 1, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse goodsCnt(@RequestBody @Validated GoodsCntDto goodsCntDto) { MallShoppingCart shoppingCart = new MallShoppingCart(); shoppingCart.setId(goodsCntDto.getId()); shoppingCart.setCnt(goodsCntDto.getCnt()); src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiMemberCollectionController.java
File was renamed from src/main/java/cc/mrbird/febs/mall/controller/ApiMemberCollectionController.java @@ -1,6 +1,8 @@ package cc.mrbird.febs.mall.controller; package cc.mrbird.febs.mall.controller.dependentStation; import cc.mrbird.febs.common.annotation.Limit; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.LimitType; import cc.mrbird.febs.mall.dto.AddCollectionDto; import cc.mrbird.febs.mall.dto.MemberCollectionListDto; import cc.mrbird.febs.mall.service.IMallMemberCollectionService; @@ -18,17 +20,18 @@ @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/collection") @Api(value = "ApiMemberCollectionController", tags = "收藏接口类") @Api(value = "ApiMemberCollectionController", tags = "DS-收藏") public class ApiMemberCollectionController { @Autowired private IMallMemberCollectionService mallMemberCollectionService; @ApiOperation(value = "添加收藏") @PostMapping(value = "/add") public FebsResponse add(@RequestBody AddCollectionDto addCollectionDto) { mallMemberCollectionService.add(addCollectionDto); return new FebsResponse().success().message("收藏成功"); @PostMapping(value = "/addCollection") @Limit(key = "addCollection", period = 1, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse add(@RequestBody @Validated AddCollectionDto addCollectionDto) { return mallMemberCollectionService.add(addCollectionDto); } @ApiOperation(value = "获取收藏列表") @@ -38,9 +41,10 @@ } @ApiOperation(value = "取消收藏") @PostMapping(value = "/del/{ids}") @PostMapping(value = "/delCollection/{ids}") @Limit(key = "delCollection", period = 1, count = 1, name = "注册", prefix = "limit",limitType = LimitType.IP) public FebsResponse del(@PathVariable("ids") String ids) { mallMemberCollectionService.del(ids); return new FebsResponse().success().message("取消成功"); return new FebsResponse().success().message("Cancelled successfully"); } } src/main/java/cc/mrbird/febs/mall/controller/dependentStation/enums/SalesServiceEnums.java
New file @@ -0,0 +1,21 @@ package cc.mrbird.febs.mall.controller.dependentStation.enums; import lombok.Getter; @Getter public enum SalesServiceEnums { // 发货人 WHATSAPP("SALES_SERVICE", "WHATSAPP"), PHONE("SALES_SERVICE", "PHONE"), EMAIL("SALES_SERVICE", "EMAIL"); private String type; private String code; SalesServiceEnums(String type, String code) { this.type = type; this.code = code; } } src/main/java/cc/mrbird/febs/mall/dto/AddCollectionDto.java
@@ -5,10 +5,13 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; @Data @ApiModel(value = "AddCollectionDto", description = "添加收藏接受参数类") public class AddCollectionDto { @NotBlank(message = "The product cannot be empty") @ApiModelProperty(value = "商品ID") private Long goodsId; } src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
@@ -20,17 +20,8 @@ @ApiModelProperty(value = "地址ID", example = "1") private Long addressId; @ApiModelProperty(value = "提货团长特征码", example = "1") private String takeUniqueCode; // @ApiModelProperty(value = "配送方式 1:自提 2:快递(默认自提)", example = "1") // private Integer deliveryType; @ApiModelProperty(value = "订单提交类型", example = "1从购物车提交, 2从商品直接提交") private Integer type; @ApiModelProperty(value = "是否送货上门 1:是 2:否", example = "1") private Integer isHome; @ApiModelProperty(value = "备注") private String remark; @@ -40,12 +31,6 @@ @ApiModelProperty(value = "1-普通订单/2-积分订单") private Integer orderType; @ApiModelProperty(value = "会员优惠卷ID") private Long memberCouponId; @ApiModelProperty(value = "业绩所属邀请码") private String memberInviteId; @ApiModelProperty(value = "商品明细") private List<AddOrderItemDto> items; src/main/java/cc/mrbird/febs/mall/dto/AddressInfoDto.java
@@ -14,39 +14,49 @@ @ApiModel(value = "AddressInfoDto", description = "地址接收参数类") public class AddressInfoDto { @ApiModelProperty(value = "id", example = "编辑的时候传") @NotBlank(message = "{required}") @ApiModelProperty(value = "id") private Long id; @NotBlank(message = "参数不能为空") @ApiModelProperty(value = "姓名", example = "王") @NotBlank(message = "Last name required") @ApiModelProperty(value = "Last name") private String name; @NotBlank(message = "参数不能为空") @ApiModelProperty(value = "手机号", example = "15773001234") private String phone; //省 @NotBlank(message = "参数不能为空") @ApiModelProperty(value = "省", example = "北京市朝阳区") private String province; //市 @NotBlank(message = "参数不能为空") @ApiModelProperty(value = "市", example = "北京市朝阳区") private String city; @NotBlank(message = "First name required") @ApiModelProperty(value = "First name") private String firstName; @NotBlank(message = "参数不能为空") @ApiModelProperty(value = "地区", example = "北京市朝阳区") private String area; @NotBlank(message = "参数不能为空") @ApiModelProperty(value = "地址", example = "朝阳街道110栋119号") @NotBlank(message = "Address1 required") @ApiModelProperty(value = "Address1") private String address; @ApiModelProperty(value = "经度", example = "112.12345678") @ApiModelProperty(value = "Address2") private String area; @ApiModelProperty(value = "Postcode") private String postcode; @ApiModelProperty(value = "Phone Number") private String phone; @ApiModelProperty(value = "City") private String city; @NotBlank(message = "State / Province required") @ApiModelProperty(value = "State / Province") private String province; @NotBlank(message = "Country/Region required") @ApiModelProperty(value = "Country/Region") private String country; /** * 经度 */ @ApiModelProperty(value = "经度") private String longitude; @ApiModelProperty(value = "纬度", example = "87.12345678") /** * 纬度 */ @ApiModelProperty(value = "纬度") private String latitude; @ApiModelProperty(value = "是否默认", example = "1是2否") private Integer isDefault; } src/main/java/cc/mrbird/febs/mall/dto/ForgetPwdDto.java
@@ -15,15 +15,16 @@ @ApiModel(value = "ForgetPwdDto", description = "忘记/修改密码参数接收类") public class ForgetPwdDto { @NotBlank(message = "账号不能为空") @ApiModelProperty(value = "账号", example = "15773001234") private String account; @NotBlank(message = "密码不能为空") @NotBlank(message = "The password cannot be empty") @ApiModelProperty(value = "新密码", example = "123456") private String password; private String Password; @NotBlank(message = "验证码不能为空") @ApiModelProperty(value = "验证码", example = "123456") private String code; @NotBlank(message = "The new password cannot be empty") @ApiModelProperty(value = "新密码", example = "123456") private String newPassword; @NotBlank(message = "Confirm that the new password cannot be empty") @ApiModelProperty(value = "新密码", example = "123456") private String newPasswordAgain; } src/main/java/cc/mrbird/febs/mall/dto/LoginDto.java
@@ -14,11 +14,11 @@ @ApiModel(value = "LoginDto", description = "登录接口参数接收类") public class LoginDto { @NotBlank(message = "账号不能为空") @ApiModelProperty(value = "账号", example = "15773001234") @NotBlank(message = "The account cannot be empty") @ApiModelProperty(value = "手机号", example = "15773001234") private String account; @NotBlank(message = "密码不能为空") @NotBlank(message = "The password cannot be empty") @ApiModelProperty(value = "密码", example = "123456") private String password; } src/main/java/cc/mrbird/febs/mall/dto/ModifyMemberInfoDto.java
@@ -18,15 +18,4 @@ @ApiModelProperty(value = "头像", example = "123") private String photo; @ApiModelProperty(value = "性别 男 女", example = "123") private String sex; @ApiModelProperty(value = "生日", example = "123") private String birthday; @ApiModelProperty(value = "真实姓名") private String realName; @ApiModelProperty(value = "邮箱") private String mailAddress; } src/main/java/cc/mrbird/febs/mall/dto/RegisterDto.java
@@ -14,30 +14,12 @@ @ApiModel(value = "RegisterDto", description = "用户注册参数接收类") public class RegisterDto { @NotBlank(message = "账号不能为空") @NotBlank(message = "The account cannot be empty") @ApiModelProperty(value = "手机号", example = "15773001234") private String account; @ApiModelProperty(value = "类型 1-手机号 2-邮箱", example = "1") private String type = "1"; @NotBlank(message = "验证码不能为空") @ApiModelProperty(value = "验证码", example = "123456") private String code; @NotBlank(message = "密码不能为空") @NotBlank(message = "The password cannot be empty") @ApiModelProperty(value = "密码", example = "123456") private String password; @NotBlank(message = "密码不能为空") @ApiModelProperty(value = "重复密码", example = "123456") private String passwordAgain; // @NotBlank(message = "邀请码不能为空") @ApiModelProperty(value = "邀请码") private String inviteId; @ApiModelProperty(hidden = true) private String registType; } src/main/java/cc/mrbird/febs/mall/entity/MallAddressInfo.java
@@ -14,7 +14,10 @@ private String name; private String fristName; private String phone; private String postcode; private Long memberId; @@ -48,5 +51,6 @@ private String province; //市 private String city; private String country; } src/main/java/cc/mrbird/febs/mall/service/IApiMallActService.java
File was deleted src/main/java/cc/mrbird/febs/mall/service/IApiMallAddressInfoService.java
@@ -11,15 +11,8 @@ public interface IApiMallAddressInfoService extends IService<MallAddressInfo> { List<AddressInfoVo> findAddressInfoList(); FebsResponse findAddressInfo(); FebsResponse addAddress(AddressInfoDto addressInfoDto); FebsResponse modifyAddress(AddressInfoDto addressInfoDto); void modifyAddress(AddressInfoDto addressInfoDto); void setDefaultAddress(Long id); FebsResponse identifyAddress(ApiIdentifyAddressDto identifyAddressDto); FebsResponse getProvince(Long id); } src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
@@ -27,84 +27,26 @@ FebsResponse findMemberInfo(); FebsResponse findMemberMarkCnt(); FebsResponse setTradePwd(ForgetPwdDto forgetPwdDto); FebsResponse modifyMemberInfo(ModifyMemberInfoDto modifyMemberInfoDto); FebsResponse teamList(TeamListDto teamListDto); MyTeamVo teamListForMine(TeamListDto teamListDto); FebsResponse moneyFlows(MoneyFlowDto moneyFlowDto); void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, String description, String remark, Long rtMemberId, Integer status, Integer flowType); void transfer(TransferDto transferDto); void setPayment(MallMemberPayment mallMemberPayment); MallMemberPayment findMemberPayment(); void bindPhone(AccountAndCodeDto accountAndCodeDto); BigDecimal canMoney(); List<MallMember> findRankList(RankListDto rankListDto); MallMember findMemberInfoByAccount(String phone); MyCommissionVo myCommission(); void shopApply(ShopApplyDto shopApplyDto); MallShopApply findNewestApply(); void addRegisterAppeal(RegisterAppealDto registerAppeal); CashOutSettingVo cashOutSetting(); List<ShopListVo> findShopListVo(ShopListDto shopListDto); FebsResponse xcxLogin(ApiXcxLoginDto apiXcxLoginDto) throws IOException; FebsResponse xcxSaveInfo(ApiXcxSaveInfoDto apiXcxSaveInfoDto); FebsResponse xcxPhoneLogin(ApiXcxPhoneLoginDto apiXcxPhoneLoginDto); FebsResponse xcxOpen(ApiXcxOpenDto apiXcxOpenDto); FebsResponse rechargeWallet(ApiRechargeWalletDto apiRechargeWalletDto); void updateMemberAgent(Long memberId,String levelCode); FebsResponse agentDetail(); FebsResponse activityInfo(); FebsResponse agentApplyInfo(); FebsResponse getCoupon(GetCouponDto getCouponDto); FebsResponse scanCoupon(GetCouponDto getCouponDto); FebsResponse memberCoupon(MallMemberCouponDto mallMemberCouponDto); FebsResponse memberPayCoupon(MallMemberCouponDto mallMemberCouponDto); FebsResponse couponDetails(Long id); FebsResponse setInvite(ApiSetInviteDto apiSetInviteDto); Map<String, Object> loginEvent(); FebsResponse storeList(MallStoreDto mallStoreDto); FebsResponse storeItemList(MallStoreItemDto mallStoreItemDto); FebsResponse bindStoreMember(BindStoreMemberDto bindStoreMemberDto); FebsResponse bindList(); FebsResponse bindResult(BindResultDto bindResultDto); FebsResponse salesService(); } src/main/java/cc/mrbird/febs/mall/service/IMallMemberCollectionService.java
@@ -1,5 +1,6 @@ package cc.mrbird.febs.mall.service; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.dto.AddCollectionDto; import cc.mrbird.febs.mall.dto.MemberCollectionListDto; import cc.mrbird.febs.mall.entity.MallMemberCollection; @@ -11,7 +12,7 @@ public interface IMallMemberCollectionService extends IService<MallMemberCollection> { void add(AddCollectionDto addCollectionDto); FebsResponse add(AddCollectionDto addCollectionDto); List<CollectionListVo> findMemberCollectionList(MemberCollectionListDto memberCollectionListDto); src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java
File was deleted src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAddressInfoServiceImpl.java
@@ -19,6 +19,7 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -45,98 +46,57 @@ private MallAddressWorldMapper mallAddressWorldMapper; @Override public List<AddressInfoVo> findAddressInfoList() { Long memberId = LoginUserUtil.getLoginUser().getId(); List<MallAddressInfo> addressInfos = this.baseMapper.selectAddressInfoListByMemberId(memberId); public FebsResponse findAddressInfo() { return MallAddressInfoConversion.INSTANCE.entityListToVos(addressInfos); Long id = LoginUserUtil.getLoginUser().getId(); AddressInfoVo addressInfoVo = new AddressInfoVo(); List<MallAddressInfo> mallAddressInfos = this.baseMapper.selectList( Wrappers.lambdaQuery(MallAddressInfo.class) .eq(MallAddressInfo::getMemberId, id) ); if (CollUtil.isNotEmpty(mallAddressInfos)){ MallAddressInfo mallAddressInfo = mallAddressInfos.get(0); addressInfoVo.setId(mallAddressInfo.getId()); addressInfoVo.setName(mallAddressInfo.getName()); addressInfoVo.setFirstName(mallAddressInfo.getFristName()); addressInfoVo.setAddress(mallAddressInfo.getAddress()); addressInfoVo.setArea(mallAddressInfo.getArea()); addressInfoVo.setPostcode(mallAddressInfo.getPostcode()); addressInfoVo.setPhone(mallAddressInfo.getPhone()); addressInfoVo.setCity(mallAddressInfo.getCity()); addressInfoVo.setProvince(mallAddressInfo.getProvince()); addressInfoVo.setCountry(mallAddressInfo.getCountry()); } return new FebsResponse().success().data(addressInfoVo); } @Override public FebsResponse addAddress(AddressInfoDto addressInfoDto) { MallAddressInfo addressInfo = MallAddressInfoConversion.INSTANCE.dtoToEntity(addressInfoDto); MallMember member = LoginUserUtil.getLoginUser(); Long memberId = member.getId(); List<MallAddressInfo> existAddress = this.baseMapper.selectAddressInfoListByMemberId(memberId); if (CollUtil.isEmpty(existAddress)) { addressInfo.setIsDefault(MallAddressInfo.IS_DEFAULT_Y); } else { if (MallAddressInfo.IS_DEFAULT_Y.equals(addressInfoDto.getIsDefault())) { this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_N, memberId, null); } } addressInfo.setMemberId(memberId); addressInfo.setCreatedBy(member.getPhone()); addressInfo.setUpdatedBy(member.getPhone()); this.baseMapper.insert(addressInfo); return new FebsResponse().success().data(addressInfo.getId()); } @Override public void modifyAddress(AddressInfoDto addressInfoDto) { MallAddressInfo existAddress = this.baseMapper.selectById(addressInfoDto.getId()); if (existAddress == null) { throw new FebsException("地址不存在"); } public FebsResponse modifyAddress(AddressInfoDto addressInfoDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallAddressInfo addressInfo = MallAddressInfoConversion.INSTANCE.dtoToEntity(addressInfoDto); if (MallAddressInfo.IS_DEFAULT_Y.equals(addressInfoDto.getIsDefault())) { this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_N, memberId, null); this.baseMapper.update( null, Wrappers.lambdaUpdate(MallAddressInfo.class) .set(MallAddressInfo::getName, addressInfoDto.getName()) .set(MallAddressInfo::getFristName, addressInfoDto.getFirstName()) .set(MallAddressInfo::getAddress, addressInfoDto.getAddress()) .set(MallAddressInfo::getArea, addressInfoDto.getArea()) .set(MallAddressInfo::getPostcode, addressInfoDto.getPostcode()) .set(MallAddressInfo::getPhone, addressInfoDto.getPhone()) .set(MallAddressInfo::getCity, addressInfoDto.getCity()) .set(MallAddressInfo::getProvince, addressInfoDto.getProvince()) .set(MallAddressInfo::getCountry, addressInfoDto.getCountry()) .eq(MallAddressInfo::getMemberId, memberId) ); return new FebsResponse().success(); } addressInfo.setUpdatedTime(new Date()); this.baseMapper.updateById(addressInfo); } @Override public void setDefaultAddress(Long id) { MallAddressInfo addressInfo = this.baseMapper.selectById(id); if (addressInfo == null) { throw new FebsException("地址不存在"); } MallMember member = LoginUserUtil.getLoginUser(); this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_N, member.getId(), null); this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_Y, member.getId(), id); } static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build(); @Override public FebsResponse identifyAddress(ApiIdentifyAddressDto identifyAddressDto) { MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, JSONUtil.toJsonStr(identifyAddressDto)); Request request = new Request.Builder() .url("https://aip.baidubce.com/rpc/2.0/nlp/v1/address?access_token=" + redisUtils.get(WechatConfigure.BAIDU_ACCESS_TOKEN_REDIS_KEY).toString()) .method("POST", body) .addHeader("Content-Type", "application/json") .addHeader("Accept", "application/json") .build(); String data = ""; try { Response response = HTTP_CLIENT.newCall(request).execute(); data = response.body().string(); if (data.contains("error_code")) { JSONObject jsonObject = JSONUtil.parseObj(data); return new FebsResponse().fail().message("地址识别错误编码:"+jsonObject.get("error_code").toString()); } } catch (IOException e) { e.printStackTrace(); } return new FebsResponse().success().data(data); } @Override public FebsResponse getProvince(Long id) { LambdaQueryWrapper<MallAddressWorld> addressWorldLambdaQueryWrapper = new LambdaQueryWrapper<>(); addressWorldLambdaQueryWrapper.eq(MallAddressWorld::getPid, id) .orderByDesc(MallAddressWorld::getId); List<MallAddressWorld> mallAddressWorlds = mallAddressWorldMapper.selectList(addressWorldLambdaQueryWrapper); return new FebsResponse().success().data(mallAddressWorlds); } } src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java
@@ -55,12 +55,6 @@ */ @Override public IPage<MallGoodsListVo> findMallGoodsListInPage(MallGoodsQueryDto queryDto) { // 获取当前登录的用户信息 MallMember loginUser = LoginUserUtil.getLoginUser(); // 如果用户已登录,设置查询条件中的会员ID if (loginUser != null) { queryDto.setMemberId(loginUser.getId()); } // 初始化分页对象 Page<MallGoodsListVo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize()); // 调用Mapper方法,根据查询条件分页获取商品列表 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -8,6 +8,7 @@ import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.properties.XcxProperties; import cc.mrbird.febs.common.utils.*; import cc.mrbird.febs.mall.controller.dependentStation.enums.SalesServiceEnums; import cc.mrbird.febs.mall.conversion.MallMemberConversion; import cc.mrbird.febs.mall.conversion.MallShopApplyConversion; import cc.mrbird.febs.mall.conversion.MallStoreConversion; @@ -38,6 +39,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; @@ -98,97 +100,25 @@ String account = registerDto.getAccount(); MallMember mallMember = this.baseMapper.selectInfoByAccount(account); if (mallMember != null) { throw new FebsException("手机号已注册"); throw new FebsException("Registered"); } /** * 验证两次密码是否一致 */ String password = registerDto.getPassword(); String passwordAgain = registerDto.getPasswordAgain(); if(!password.equals(passwordAgain)){ throw new FebsException("密码不一致"); } //邀请码为admin的时候(后台添加用户),不需要验证验证码 if (!"admin".equals(registerDto.getRegistType())) { String code = registerDto.getCode(); boolean flags = commonService.verifyCode(account, code); if (!flags) { throw new FebsException("验证码错误"); } } mallMember = new MallMember(); mallMember.setPassword(SecureUtil.md5(registerDto.getPassword())); // 判断账号类型 if (AppContants.ACCOUNT_TYPE_MOBILE.equals(registerDto.getType())) { mallMember.setPhone(registerDto.getAccount()); } else { mallMember.setEmail(registerDto.getAccount()); } //对于邀请码的验证和上级联系人的验证 Integer count = this.baseMapper.selectCount(null); if (count != null && count != 0) { if(!StrUtil.isEmpty(registerDto.getInviteId())){ String inviteId = registerDto.getInviteId(); MallMember inviteMember = this.baseMapper.selectInfoByInviteId(inviteId); if (inviteMember == null) { throw new FebsException("邀请码不存在"); } mallMember.setReferrerId(registerDto.getInviteId()); } } mallMember.setName(account); mallMember.setEmail(registerDto.getAccount()); mallMember.setPassword(SecureUtil.md5(password)); mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); mallMember.setSex("男"); mallMember.setBindPhone(account); this.baseMapper.insert(mallMember); String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId()); mallMember.setInviteId(inviteId); //推荐人和推荐人链 boolean flag = false; String parentId = mallMember.getReferrerId(); if (StrUtil.isBlank(parentId)) { flag = true; } String ids = ""; while (!flag) { if (StrUtil.isBlank(ids)) { ids += parentId; } else { ids += ("," + parentId); } MallMember parentMember = this.baseMapper.selectInfoByInviteId(parentId); if (parentMember == null) { break; } parentId = parentMember.getReferrerId(); if (StrUtil.isBlank(parentMember.getReferrerId())) { flag = true; } } if (StrUtil.isNotBlank(ids)) { mallMember.setReferrerIds(ids); } //会员VIP等级 List<MallVipConfig> configs = mallVipConfigMapper.selectVipConfigList(); if (StrUtil.isBlank(mallMember.getLevel()) && CollUtil.isNotEmpty(configs)) { MallVipConfig mallVipConfig = configs.get(0); mallMember.setLevel(mallVipConfig.getCode()); } this.baseMapper.updateById(mallMember); MallMemberWallet wallet = new MallMemberWallet(); wallet.setBalance(BigDecimal.ZERO); wallet.setMemberId(mallMember.getId()); mallMemberWalletMapper.insert(wallet); return new FebsResponse().success().message("注册成功"); return new FebsResponse().success().message("registered successfully"); } @Override @@ -197,11 +127,11 @@ MallMember mallMember = this.baseMapper.selectInfoByAccountAndPwd(loginDto.getAccount(), md5Pwd); if (mallMember == null) { throw new FebsException("用户不存在或账号密码错误"); throw new FebsException("The user does not exist or the account password is incorrect"); } if (MallMember.ACCOUNT_STATUS_DISABLED.equals(mallMember.getAccountStatus())) { throw new FebsException("该账号存在异常, 暂限制登录"); throw new FebsException("The account is abnormal and is temporarily restricted from logging in"); } String redisKey = AppContants.APP_LOGIN_PREFIX + mallMember.getId(); @@ -231,21 +161,27 @@ @Override public FebsResponse forgetPwd(ForgetPwdDto forgetPwdDto) { MallMember mallMember = this.baseMapper.selectInfoByAccount(forgetPwdDto.getAccount()); Long id = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(id); if (mallMember == null) { throw new FebsException("账号不存在"); throw new FebsException("Setup failed"); } boolean b = commonService.verifyCode(forgetPwdDto.getAccount(), forgetPwdDto.getCode()); if (!b) { throw new FebsException("验证码错误"); if (!forgetPwdDto.getNewPassword().equals(forgetPwdDto.getNewPasswordAgain())){ throw new FebsException("Setup failed"); } String pwd = SecureUtil.md5(forgetPwdDto.getPassword()); String pwd = SecureUtil.md5(forgetPwdDto.getNewPassword()); mallMember.setPassword(pwd); this.baseMapper.updateById(mallMember); return new FebsResponse().success().message("重置成功"); this.baseMapper.update( null, Wrappers.lambdaUpdate(MallMember.class) .set(MallMember::getPassword, pwd) .eq(MallMember::getId, id) ); return new FebsResponse().success().message("Setup successful"); } @Override @@ -262,94 +198,21 @@ } redisUtils.del(AppContants.APP_LOGIN_PREFIX + id); redisUtils.del(AppContants.XCX_LOGIN_PHONE_PREFIX + id); return new FebsResponse().success().message("退出登录"); return new FebsResponse().success().message("Log out"); } @Override public FebsResponse findMemberInfo() { Long id = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(id); MallMemberVo mallMemberVo = MallMemberConversion.INSTANCE.entityToVo(mallMember); if(StrUtil.isNotEmpty(mallMember.getReferrerId())){ MallMember referMember = this.baseMapper.selectInfoByInviteId(mallMember.getReferrerId()); if (referMember != null) { mallMemberVo.setReferrerName(referMember.getName()); } } if (StrUtil.isNotBlank(mallMember.getTradePassword())) { mallMemberVo.setHasTradePwd(1); } MallMemberPayment payment = mallMemberPaymentMapper.selectByMemberId(id); if (payment != null) { mallMemberVo.setHasPayment(1); } MemberCollectionListDto memberCollectionListDto = new MemberCollectionListDto(); memberCollectionListDto.setPageNow(1); memberCollectionListDto.setPageSize(10); List<CollectionListVo> collectionList = mallMemberCollectionService.findMemberCollectionList(memberCollectionListDto); mallMemberVo.setCollectionCnt(CollUtil.isNotEmpty(collectionList) ? collectionList.size() : 0); MemberFootprintListDto memberFootprintListDto = new MemberFootprintListDto(); memberFootprintListDto.setPageNow(1); memberFootprintListDto.setPageSize(10); List<FootprintListVo> footprintList = mallMemberFootprintService.findMemberFootprintList(memberFootprintListDto); mallMemberVo.setFootprintCnt(CollUtil.isNotEmpty(footprintList) ? footprintList.size() : 0); List<MallMember> mallMembers = this.baseMapper.selectByRefererId(mallMember.getInviteId()); mallMemberVo.setChildCnt(CollUtil.isNotEmpty(mallMembers) ? mallMembers.size() : 0); MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberVo.getId()); MallVipConfig mallVipConfig = mallVipConfigMapper.selectVipConfigByCode(mallMember.getLevel()); mallMemberVo.setVipInfo(mallVipConfig); mallMemberVo.setBalance(wallet.getBalance()); // mallMemberVo.setScore(wallet.getScore()); mallMemberVo.setPrizeScore(wallet.getPrizeScore()); // mallMemberVo.setTotalCost(mallOrderInfoMapper.selectTotalAmount(id)); MallMemberVo mallMemberVo = new MallMemberVo(); mallMemberVo.setName(mallMember.getName()); mallMemberVo.setEmail(mallMember.getEmail()); mallMemberVo.setAvatar(mallMember.getAvatar()); return new FebsResponse().success().data(mallMemberVo); } @Override public FebsResponse findMemberMarkCnt() { Long id = LoginUserUtil.getLoginUser().getId(); List<Map<String, Integer>> maps = mallOrderInfoMapper.selectMemberOrderStatusCnt(id); Map<Integer, Integer> orderCnt = new HashMap<>(); if (CollUtil.isNotEmpty(maps)) { for (Map<String, Integer> map : maps) { orderCnt.put(map.get("status"), map.get("cnt")); } } List<MallShoppingCart> carts = mallShoppingCartMapper.selectCartGoodsList(id, 1); Map<String, Object> result = new HashMap<>(); result.put("order", orderCnt); result.put("carts", carts.size()); return new FebsResponse().success().data(result); } @Override public FebsResponse setTradePwd(ForgetPwdDto forgetPwdDto) { MallMember memberId = LoginUserUtil.getLoginUser(); MallMember mallMember = this.baseMapper.selectById(memberId); if (mallMember == null) { throw new FebsException("账号不存在"); } boolean b = commonService.verifyCode(forgetPwdDto.getAccount(), forgetPwdDto.getCode()); if (!b) { throw new FebsException("验证码错误"); } mallMember.setTradePassword(SecureUtil.md5(forgetPwdDto.getPassword())); this.baseMapper.updateById(mallMember); return new FebsResponse().success().message("设置成功"); } @Override public FebsResponse modifyMemberInfo(ModifyMemberInfoDto modifyMemberInfoDto) { @@ -363,55 +226,11 @@ mallMember.setAvatar(modifyMemberInfoDto.getPhoto()); } mallMember.setSex(modifyMemberInfoDto.getSex()); mallMember.setBirthday(DateUtil.parseDate(modifyMemberInfoDto.getBirthday())); mallMember.setRealName(modifyMemberInfoDto.getRealName()); mallMember.setEmail(modifyMemberInfoDto.getMailAddress()); this.baseMapper.updateById(mallMember); return new FebsResponse().success().message("修改成功"); return new FebsResponse().success().message("success"); } @Override public FebsResponse teamList(TeamListDto teamListDto) { Long memberId = null; if (teamListDto.getId() == null) { memberId = LoginUserUtil.getLoginUser().getId(); } else { memberId = teamListDto.getId(); } MallMember mallMember = this.baseMapper.selectById(memberId); List<TeamListVo> list = this.baseMapper.selectTeamListByInviteId(mallMember.getInviteId()); MyTeamVo myTeamVo = new MyTeamVo(); myTeamVo.setTeam(list); myTeamVo.setMyAchieve(this.mallOrderInfoMapper.selectAmountOrTeamAmount(mallMember.getInviteId(), 1)); myTeamVo.setMyTeamAchieve(this.mallOrderInfoMapper.selectAmountOrTeamAmount(mallMember.getInviteId(), 2)); myTeamVo.setMyTeamCnt(this.baseMapper.selectAllChildAgentListByInviteId(mallMember.getInviteId()).size()); return new FebsResponse().success().data(myTeamVo); } @Override public MyTeamVo teamListForMine(TeamListDto teamListDto) { return null; } @Override public FebsResponse moneyFlows(MoneyFlowDto moneyFlowDto) { IPage<MoneyFlowVo> page = new Page<>(moneyFlowDto.getPageNum(), moneyFlowDto.getPageSize()); Long id = LoginUserUtil.getLoginUser().getId(); moneyFlowDto.setMemberId(id); IPage<MoneyFlowVo> pages = mallMoneyFlowMapper.selectApiMoneyFlowInPage(page, moneyFlowDto); if (moneyFlowDto.getFlowType() == 3) { pages.getRecords().forEach(item -> { item.setDescription(ScoreFlowTypeEnum.getDescByValue(item.getType())); }); } return new FebsResponse().success().data(pages); } @Override public void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, String description, String remark, Long rtMemberId, Integer status, Integer flowType) { @@ -428,56 +247,7 @@ mallMoneyFlowMapper.insert(flow); } @Override @Transactional(rollbackFor = Exception.class) public void transfer(TransferDto transferDto) { MallMember mallMember = this.baseMapper.selectInfoByAccount(transferDto.getAccount()); if (mallMember == null) { throw new FebsException("用户不存在"); } Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember loginMember = this.baseMapper.selectById(memberId); if (loginMember.getPhone().equals(transferDto.getAccount()) || loginMember.getInviteId().equals(transferDto.getAccount())) { throw new FebsException("不能给自己转账"); } if (StrUtil.isBlank(loginMember.getTradePassword())) { throw new FebsException("未设置支付密码"); } if (!loginMember.getTradePassword().equals(SecureUtil.md5(transferDto.getTradePwd()))) { throw new FebsException("支付密码错误"); } walletService.reduceBalance(transferDto.getAmount(), memberId); String orderNo = MallUtils.getOrderNum("T"); this.addMoneyFlow(memberId, transferDto.getAmount().negate(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, mallMember.getId(), null, FlowTypeEnum.BALANCE.getValue()); walletService.addBalance(transferDto.getAmount(), mallMember.getId()); this.addMoneyFlow(mallMember.getId(), transferDto.getAmount(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, memberId, null, FlowTypeEnum.BALANCE.getValue()); } @Override public void setPayment(MallMemberPayment mallMemberPayment) { MallMember member = LoginUserUtil.getLoginUser(); MallMemberPayment exist = mallMemberPaymentMapper.selectByMemberId(member.getId()); if (exist == null) { mallMemberPayment.setMemberId(member.getId()); mallMemberPaymentMapper.insert(mallMemberPayment); } else { mallMemberPayment.setId(exist.getId()); mallMemberPaymentMapper.updateById(mallMemberPayment); } } @Override public MallMemberPayment findMemberPayment() { MallMember member = LoginUserUtil.getLoginUser(); return mallMemberPaymentMapper.selectByMemberId(member.getId()); } @Override public void bindPhone(AccountAndCodeDto accountAndCodeDto) { @@ -493,56 +263,7 @@ this.baseMapper.updateById(member); } @Override public BigDecimal canMoney() { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); return wallet.getBalance().setScale(2,BigDecimal.ROUND_DOWN); } @Override public List<MallMember> findRankList(RankListDto rankListDto) { IPage<MallMember> page = new Page<>(rankListDto.getPageNum(), rankListDto.getPageSize()); MallMember member = new MallMember(); member.setQuery("2"); member.setCreatedTime(new Date()); IPage<MallMember> list = this.baseMapper.selectRankListInPage(page, member); return list.getRecords(); } @Override public MallMember findMemberInfoByAccount(String phone) { return this.baseMapper.selectInfoByAccount(phone); } @Override public MyCommissionVo myCommission() { Long id = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(id); MyCommissionVo commissionVo = MallMemberConversion.INSTANCE.entityToCommissionVo(mallMember); MallMember referMember = this.baseMapper.selectInfoByInviteId(mallMember.getReferrerId()); if (referMember != null) { commissionVo.setReferrerName(referMember.getName()); commissionVo.setAvatar(referMember.getAvatar()); } DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.AGENT_LEVEL, mallMember.getLevel()); if (dic != null) { commissionVo.setLevelName(dic.getDescription()); } MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(id); commissionVo.setCommission(wallet.getCommission()); commissionVo.setToday(mallMoneyFlowMapper.selectCommissionIncome(1, new Date(), id)); commissionVo.setMonth(mallMoneyFlowMapper.selectCommissionIncome(2, new Date(), id)); commissionVo.setTotal(mallMoneyFlowMapper.selectCommissionIncome(null, null, id)); commissionVo.setWaitCommission(BigDecimal.ZERO); return commissionVo; } @Override public void shopApply(ShopApplyDto shopApplyDto) { @@ -570,30 +291,7 @@ return mallShopApplyMapper.selectNewestApplyByMemberId(member.getId()); } @Override public void addRegisterAppeal(RegisterAppealDto registerAppeal) { MallRegisterAppeal isExist = mallRegisterAppealMapper.selectByPhoneAndName(registerAppeal.getName(), registerAppeal.getPhone()); if (isExist != null) { throw new FebsException("申诉已存在"); } isExist = new MallRegisterAppeal(); isExist.setName(registerAppeal.getName()); isExist.setPhone(registerAppeal.getPhone()); isExist.setStatus(2); mallRegisterAppealMapper.insert(isExist); } @Override public CashOutSettingVo cashOutSetting() { CashOutSettingVo cashOutSettingVo = new CashOutSettingVo(); DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.CASHOUT_SETTING.getType(), DataDictionaryEnum.CASHOUT_SETTING.getCode()); if (dic != null) { cashOutSettingVo = JSONObject.parseObject(dic.getValue(), CashOutSettingVo.class); } return cashOutSettingVo; } @Override public List<ShopListVo> findShopListVo(ShopListDto shopListDto) { @@ -613,274 +311,7 @@ private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class); @Override public FebsResponse xcxLogin(ApiXcxLoginDto apiXcxLoginDto) throws IOException { log.info("登录请求参数:{}", JSONObject.toJSONString(apiXcxLoginDto)); FebsResponse febsResponse = new FebsResponse(); String code = apiXcxLoginDto.getCode(); log.info("code:" + code); if (StrUtil.isNotBlank(code)) { String requrl = getXcxLoginUrl(code); String reslutData = HttpCurlUtil.sendGetHttp(requrl, null); net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(reslutData); log.info("微信登录获取到登录信息={}", json); if (json.containsKey("errcode")) { log.info("微信登录获取到异常信息errcode"); return febsResponse.fail().message("自动登录失败"); } String openId = json.getString("openid"); String sessionKey = json.getString("session_key"); log.info("openId={},sessionKey={}", openId, sessionKey); // 查询用户是否存在 MallMember mallMember = null; synchronized (this) { mallMember = this.baseMapper.selectMemberByOpenId(openId); if (ObjectUtil.isEmpty(mallMember)) { // 新增用户 mallMember = new MallMember(); mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); mallMember.setOpenId(openId); mallMember.setSessionKey(sessionKey); if (StrUtil.isNotBlank(apiXcxLoginDto.getInviteId())) { MallMember member = this.baseMapper.selectInfoByInviteId(apiXcxLoginDto.getInviteId()); if (member != null) { mallMember.setReferrerId(member.getInviteId()); //推荐人和推荐人链 boolean flag = false; String parentId = mallMember.getReferrerId(); if (StrUtil.isBlank(parentId)) { flag = true; } String ids = ""; while (!flag) { if (StrUtil.isBlank(ids)) { ids += parentId; } else { ids += ("," + parentId); } MallMember parentMember = this.baseMapper.selectInfoByInviteId(parentId); if (parentMember == null) { break; } parentId = parentMember.getReferrerId(); if (StrUtil.isBlank(parentMember.getReferrerId())) { flag = true; } } if (StrUtil.isNotBlank(ids)) { mallMember.setReferrerIds(ids); } } } this.baseMapper.insert(mallMember); mallMember = this.baseMapper.selectMemberByOpenId(openId); String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId()); mallMember.setInviteId(inviteId); this.baseMapper.updateById(mallMember); MallMemberWallet wallet = new MallMemberWallet(); wallet.setBalance(BigDecimal.ZERO); wallet.setMemberId(mallMember.getId()); mallMemberWalletMapper.insert(wallet); } else { mallMember.setSessionKey(sessionKey); this.baseMapper.updateById(mallMember); } } // 存放redis String redisKey = AppContants.XCX_LOGIN_PREFIX + mallMember.getId(); String existToken = redisUtils.getString(redisKey); if (StrUtil.isNotBlank(existToken)) { Object o = redisUtils.get(existToken); if (ObjectUtil.isNotEmpty(o)) { redisUtils.del(existToken); } } String token = IdUtil.simpleUUID(); redisUtils.set(token, JSONObject.toJSONString(mallMember), -1); redisUtils.set(redisKey, token, -1); Map<String, Object> authInfo = new HashMap<>(); authInfo.put("token", token); authInfo.put("appid", xcxProperties.getXcxAppid()); authInfo.put("member", mallMember); authInfo.put("rasToken", generateAsaToken(token)); febsResponse.success().data(authInfo); } else { return febsResponse.fail().message("自动登录失败"); } return febsResponse; } @Override public FebsResponse xcxSaveInfo(ApiXcxSaveInfoDto apiXcxSaveInfoDto) { log.info("name={},phone={},avatar={},sex={}", apiXcxSaveInfoDto.getNickName(),apiXcxSaveInfoDto.getPhone(),apiXcxSaveInfoDto.getAvatarUrl(),apiXcxSaveInfoDto.getGender()); Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(memberId); String nickName = apiXcxSaveInfoDto.getNickName(); if(StrUtil.isNotEmpty(nickName)){ mallMember.setName(nickName); } String phone = apiXcxSaveInfoDto.getPhone(); if(StrUtil.isNotEmpty(phone)){ mallMember.setPhone(phone); } String avatarUrl = apiXcxSaveInfoDto.getAvatarUrl(); if(StrUtil.isNotEmpty(avatarUrl)){ mallMember.setAvatar(avatarUrl); } if (StrUtil.isNotBlank(apiXcxSaveInfoDto.getRealName())) { mallMember.setRealName(apiXcxSaveInfoDto.getRealName()); } if (apiXcxSaveInfoDto.getBirthday() != null) { mallMember.setBirthday(apiXcxSaveInfoDto.getBirthday()); } List<MallVipConfig> configs = mallVipConfigMapper.selectVipConfigList(); if (StrUtil.isBlank(mallMember.getLevel()) && CollUtil.isNotEmpty(configs)) { MallVipConfig mallVipConfig = configs.get(0); mallMember.setLevel(mallVipConfig.getCode()); } mallMember.setSex(1 == apiXcxSaveInfoDto.getGender() ? "女" : "男"); this.baseMapper.updateById(mallMember); return new FebsResponse().success(); } @Override public FebsResponse xcxPhoneLogin(ApiXcxPhoneLoginDto apiXcxPhoneLoginDto) { String phone = apiXcxPhoneLoginDto.getPhone(); boolean flag = commonService.verifyCode(phone, apiXcxPhoneLoginDto.getCode()); if (flag) { // 查询用户是否存在 MallMember mallMember = null; synchronized (this) { mallMember = this.baseMapper.selectInfoByAccount(apiXcxPhoneLoginDto.getPhone()); if (ObjectUtil.isEmpty(mallMember)) { // 新增用户 mallMember = new MallMember(); mallMember.setPhone(phone); mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); this.baseMapper.insert(mallMember); String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId()); mallMember.setInviteId(inviteId); this.baseMapper.updateById(mallMember); MallMemberWallet wallet = new MallMemberWallet(); wallet.setBalance(BigDecimal.ZERO); wallet.setMemberId(mallMember.getId()); mallMemberWalletMapper.insert(wallet); } } // 存放redis String redisKey = AppContants.XCX_LOGIN_PHONE_PREFIX + mallMember.getId(); String existToken = redisUtils.getString(redisKey); if (StrUtil.isNotBlank(existToken)) { Object o = redisUtils.get(existToken); if (ObjectUtil.isNotEmpty(o)) { redisUtils.del(existToken); } } String token = IdUtil.simpleUUID(); redisUtils.set(token, JSONObject.toJSONString(mallMember), 360000); redisUtils.set(redisKey, token, 360000); Map<String, Object> authInfo = new HashMap<>(); authInfo.put("token", token); authInfo.put("member", mallMember); authInfo.put("rasToken", generateAsaToken(token)); return new FebsResponse().success().data(authInfo); } return new FebsResponse().fail().message("验证码错误"); } @Override public FebsResponse xcxOpen(ApiXcxOpenDto apiXcxOpenDto) { DataDictionaryCustom rangeSwitch = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SWITCH.getType(), DataDictionaryEnum.RANGE_SWITCH.getCode()); if(StrUtil.isNotBlank(rangeSwitch.getValue()) && "1".equals(rangeSwitch.getValue())){ if(ObjectUtil.isNull(apiXcxOpenDto.getLongitude()) || ObjectUtil.isNull(apiXcxOpenDto.getLatitude())){ return new FebsResponse().fail().message("请授权位置信息"); } Double longitude = apiXcxOpenDto.getLongitude(); Double latitude = apiXcxOpenDto.getLatitude(); DataDictionaryCustom rangeSize = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SIZE.getType(), DataDictionaryEnum.RANGE_SIZE.getCode()); if(ObjectUtil.isEmpty(rangeSize)){ return new FebsResponse().success().data(2); } if(StrUtil.isBlank(rangeSize.getValue())){ return new FebsResponse().success().data(2); } //方位大小,换成单位:米 Integer value = Integer.parseInt(rangeSize.getValue()) * 1000; //根据经纬度获取周围团长的距离 MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByLonAndLat(longitude, latitude); if(ObjectUtil.isEmpty(mallTeamLeader)){ return new FebsResponse().success().data(2); } Double distance = mallTeamLeader.getDistance(); if(value <= distance){ return new FebsResponse().success().data(2); } } return new FebsResponse().success().data(1); } private final IXcxPayService iXcxPayService; @Override @Transactional(rollbackFor = Exception.class) public FebsResponse rechargeWallet(ApiRechargeWalletDto apiRechargeWalletDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); BigDecimal amount = apiRechargeWalletDto.getAmount(); if(BigDecimal.ZERO.compareTo(amount)>0){ return new FebsResponse().fail().message("请输入正确的充值金额"); } Integer type = apiRechargeWalletDto.getType(); if(2 == type){ //成为合伙人的充值金额 MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(apiRechargeWalletDto.getAgentApplyId()); BigDecimal agentPrice = mallAgentRecord.getAmount(); // DataDictionaryCustom agentPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.PRICE_AMOUNT.getType(), // DataDictionaryEnum.PRICE_AMOUNT.getCode()); // String agentPrice = agentPriceDic.getValue(); // BigDecimal price = new BigDecimal(agentPrice); if(agentPrice.compareTo(amount) != 0){ return new FebsResponse().fail().message("成为合伙人的金额为"+agentPrice); } } String rechargeNo = "CZ_"+MallUtils.getOrderNum(); apiRechargeWalletDto.setRechargeNo(rechargeNo); apiRechargeWalletDto.setMemberId(memberId); BrandWCPayRequestData brandWCPayRequestData = null; try { brandWCPayRequestData = iXcxPayService.startRechargeWallet(apiRechargeWalletDto); } catch (Exception e) { throw new FebsException("支付失败"); } mallMoneyFlowService.addMoneyFlow( memberId, amount, MoneyFlowTypeEnum.RECHARGE.getValue(), rechargeNo, FlowTypeEnum.BALANCE.getValue(), "余额充值",1); String wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestData); String payResultStr = brandWCPayRequestData.getPrepay_id(); Map<String, Object> map = new HashMap<>(); map.put("orderInfo", payResultStr); map.put("wxResultStr", wxResultStr); return new FebsResponse().success().data(map).message("充值即将到账"); } @Override public void updateMemberAgent(Long memberId,String levelCode) { @@ -892,132 +323,7 @@ this.baseMapper.updateById(mallMember); } @Override public FebsResponse agentDetail() { DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.AGENT_DETAILS.getType(), DataDictionaryEnum.AGENT_DETAILS.getCode()); Map<String, Object> map = new HashMap<>(); if(ObjectUtil.isNotEmpty(dataDictionaryCustom)){ map.put("agentDetail", dataDictionaryCustom.getValue()); } return new FebsResponse().success().data(map); } @Override public FebsResponse activityInfo() { DataDictionaryCustom activityBulletinDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.ACTIVITY_BULLETIN.getType(), DataDictionaryEnum.ACTIVITY_BULLETIN.getCode()); DataDictionaryCustom giveAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.GIVE_AMOUNT.getType(), DataDictionaryEnum.GIVE_AMOUNT.getCode()); DataDictionaryCustom giveStateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.GIVE_STATE.getType(), DataDictionaryEnum.GIVE_STATE.getCode()); Map<String, Object> map = new HashMap<>(); if(ObjectUtil.isNotEmpty(activityBulletinDic)){ map.put("activityBulletin", ObjectUtil.isEmpty(activityBulletinDic.getValue()) ? "暂无活动" : activityBulletinDic.getValue()); } if(ObjectUtil.isNotEmpty(giveAmountDic)){ map.put("giveAmount", ObjectUtil.isEmpty(giveAmountDic.getValue()) ? 0 : giveAmountDic.getValue()); } map.put("giveState",giveStateDic.getValue()); return new FebsResponse().success().data(map); } @Override public FebsResponse agentApplyInfo() { Long memberId = LoginUserUtil.getLoginUser().getId(); ApiMallAgentRecordVo apiMallAgentRecordVo = mallAgentRecordMapper.selectApiMallAgentRecordVoByMemberIdAndState(memberId,MallAgentRecord.APPLY_ING); return new FebsResponse().success().data(apiMallAgentRecordVo); } @Override public FebsResponse getCoupon(GetCouponDto getCouponDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); String couponUUID = IdUtil.simpleUUID(); // String couponUUID = getCouponDto.getCouponUUID(); // QueryWrapper<MallMemberCoupon> objectQueryWrapper = new QueryWrapper<>(); // objectQueryWrapper.eq("coupon_uuid",couponUUID); // List<MallMemberCoupon> mallMemberCouponDone = mallMemberCouponMapper.selectList(objectQueryWrapper); // if(CollUtil.isNotEmpty(mallMemberCouponDone)){ // return new FebsResponse().success(); // } //通过邀请人信息,获取能领取的优惠卷信息 MallMember mallMember = this.baseMapper.selectInfoByInviteId(getCouponDto.getInviteId()); if(ObjectUtil.isNotEmpty(mallMember)){ SalemanCoupon salemanCoupon = salemanCouponMapper.selectByMemberId(mallMember.getId()); if(ObjectUtil.isNotEmpty(salemanCoupon)){ Long couponId = salemanCoupon.getCouponId(); Long goodsId = getCouponDto.getGoodsId(); MallGoods mallGoods = mallGoodsMapper.selectById(goodsId); //验证商品存不存在,且上没上架 if(ObjectUtil.isNotEmpty(mallGoods) && MallGoods.ISSALE_STATUS_ENABLE == mallGoods.getIsSale()){ // List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdAndGoodsIdAndCouponId(memberId, goodsId, couponId,mallMember.getInviteId()); // List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdAndGoodsIdAndCouponIdWithOutInviteId(memberId, goodsId, couponId); List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdAndGoodsIdAndCouponIdWithOutInviteId(memberId, goodsId); if(CollUtil.isEmpty(mallMemberCoupons)){ //商品优惠卷如果绑定了,那么当前登陆者获取一张卷 List<CouponGoods> couponGoodsList = couponGoodsMapper.selectByGoodIdAndCouponId(goodsId,couponId); MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId); if(CollUtil.isNotEmpty(couponGoodsList)){ MallMemberCoupon mallMemberCoupon = new MallMemberCoupon(); mallMemberCoupon.setCouponId(couponId); mallMemberCoupon.setCouponName(mallGoodsCoupon.getName()); mallMemberCoupon.setMemberId(memberId); mallMemberCoupon.setGoodsId(goodsId); mallMemberCoupon.setCouponUuid(couponUUID); mallMemberCoupon.setInviteId(mallMember.getInviteId()); mallMemberCoupon.setState(1); mallMemberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(),mallGoodsCoupon.getExpireDay())); mallMemberCouponMapper.insert(mallMemberCoupon); } } } } } return new FebsResponse().success(); } @Override public FebsResponse scanCoupon(GetCouponDto getCouponDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); String couponUUID = IdUtil.simpleUUID(); //通过邀请人信息,获取能领取的优惠卷信息 MallMember mallMember = this.baseMapper.selectInfoByInviteId(getCouponDto.getInviteId()); if(ObjectUtil.isNotEmpty(mallMember)){ SalemanCoupon salemanCoupon = salemanCouponMapper.selectByMemberId(mallMember.getId()); if(ObjectUtil.isNotEmpty(salemanCoupon)){ Long couponId = salemanCoupon.getCouponId(); List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdCouponIdWithOutInviteId(memberId, couponId); if(CollUtil.isEmpty(mallMemberCoupons)){ //商品优惠卷如果绑定了,那么当前登陆者获取一张卷 MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId); MallMemberCoupon mallMemberCoupon = new MallMemberCoupon(); mallMemberCoupon.setCouponId(couponId); mallMemberCoupon.setCouponName(mallGoodsCoupon.getName()); mallMemberCoupon.setMemberId(memberId); mallMemberCoupon.setCouponUuid(couponUUID); mallMemberCoupon.setInviteId(mallMember.getInviteId()); mallMemberCoupon.setState(1); mallMemberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(),mallGoodsCoupon.getExpireDay())); mallMemberCouponMapper.insert(mallMemberCoupon); } } } return new FebsResponse().success(); } @Override public FebsResponse memberCoupon(MallMemberCouponDto mallMemberCouponDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); IPage<MallMemberCouponVo> page = new Page<>(mallMemberCouponDto.getPageNum(), mallMemberCouponDto.getPageSize()); mallMemberCouponDto.setMemberId(memberId); mallMemberCouponDto.setExpireTime(DateUtil.date()); IPage<MallMemberCouponVo> pages = mallMemberCouponMapper.selectListInPage(page, mallMemberCouponDto); return new FebsResponse().success().data(pages); } @Override public FebsResponse memberPayCoupon(MallMemberCouponDto mallMemberCouponDto) { @@ -1035,18 +341,6 @@ return new FebsResponse().success().data(mallMemberCouponVos); } @Override public FebsResponse couponDetails(Long id) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(id); MallMemberCouponVo mallMemberCouponVo = new MallMemberCouponVo(); mallMemberCouponVo.setCouponName(mallMemberCoupon.getCouponName()); MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(mallMemberCoupon.getCouponId()); mallMemberCouponVo.setCostAmount(mallGoodsCoupon.getCostAmount()); mallMemberCouponVo.setRealAmount(mallGoodsCoupon.getRealAmount()); mallMemberCouponVo.setType(mallGoodsCoupon.getType()); return new FebsResponse().success().data(mallMemberCouponVo); } @Override public FebsResponse setInvite(ApiSetInviteDto apiSetInviteDto) { @@ -1102,216 +396,33 @@ return String.format(wechatLoginUrl, xcxProperties.getXcxAppid(), xcxProperties.getXcxSecret(), code); } @Override public Map<String, Object> loginEvent() { MallMember loginUser = LoginUserUtil.getLoginUser(); MallMember member = this.baseMapper.selectById(loginUser.getId()); this.baseMapper.updateLastLogin(member.getId(),new Date()); DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.UNALIVE_COUPON.getType(), DataDictionaryEnum.UNALIVE_COUPON.getCode()); if (dic == null || StrUtil.isBlank(dic.getValue())) { return new HashMap<>(); } Date today = new Date(); Date lastLoginTime = member.getLastLoginTime(); if (lastLoginTime == null) { lastLoginTime = new Date(); } long days = DateUtil.between(DateUtil.endOfDay(lastLoginTime), DateUtil.endOfDay(today), DateUnit.DAY); List<VipSettingUnAliveSettingBo> list = JSONObject.parseArray(dic.getValue(), VipSettingUnAliveSettingBo.class); List<Long> couponIds = list.stream().filter(item -> { return item.getDay() <= days && item.getCouponId() != null; }).map(VipSettingUnAliveSettingBo::getCouponId).collect(Collectors.toList()); if (CollUtil.isEmpty(couponIds)) { return new HashMap<>(); } LambdaQueryWrapper<MallGoodsCoupon> query = new LambdaQueryWrapper<>(); query.in(MallGoodsCoupon::getId, couponIds) .eq(MallGoodsCoupon::getState, 2); List<MallGoodsCoupon> coupons = mallGoodsCouponMapper.selectList(query); LambdaQueryWrapper<MallMemberCoupon> memberCouponQuery = new LambdaQueryWrapper<>(); memberCouponQuery.in(MallMemberCoupon::getCouponId, couponIds) .eq(MallMemberCoupon::getMemberId, member.getId()) .eq(MallMemberCoupon::getFromType, 3) .ge(MallMemberCoupon::getCreatedTime, DateUtil.beginOfDay(new Date())) .le(MallMemberCoupon::getCreatedTime, DateUtil.endOfDay(new Date())); List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectList(memberCouponQuery); if (CollUtil.isNotEmpty(mallMemberCoupons)) { Map<Long, MallMemberCoupon> map = mallMemberCoupons.stream().collect(Collectors.toMap(MallMemberCoupon::getCouponId, MallMemberCoupon -> MallMemberCoupon)); coupons = coupons.stream().filter(item -> { return map.get(item.getId()) == null; }).collect(Collectors.toList()); } if (CollUtil.isEmpty(coupons)) { return new HashMap<>(); } coupons.forEach(item -> { MallMemberCoupon memberCoupon = new MallMemberCoupon(); memberCoupon.setCouponId(item.getId()); memberCoupon.setCouponName(item.getName()); memberCoupon.setInviteId(member.getInviteId()); memberCoupon.setCouponUuid(IdUtil.simpleUUID()); memberCoupon.setState(1); memberCoupon.setFromType(3); memberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(), item.getExpireDay())); memberCoupon.setMemberId(member.getId()); mallMemberCouponMapper.insert(memberCoupon); }); Map<String, Object> result = new HashMap<>(); result.put("coupon", coupons); return result; } @Override public FebsResponse storeList(MallStoreDto mallStoreDto) { QueryWrapper<MallStore> mallStoreQueryWrapper = new QueryWrapper<>(); if(StrUtil.isNotEmpty(mallStoreDto.getName())){ mallStoreQueryWrapper.like("name",mallStoreDto.getName()); public FebsResponse salesService() { LoginUserUtil.getLoginUser().getId(); MallSalesServiceVo mallSalesServiceVo = new MallSalesServiceVo(); List<DataDictionaryCustom> dataDictionaryCustoms = dataDictionaryCustomMapper.selectDicByType( SalesServiceEnums.WHATSAPP.getType() ); if (dataDictionaryCustoms.size() > 0){ for (DataDictionaryCustom dataDictionaryCustom : dataDictionaryCustoms){ if (SalesServiceEnums.WHATSAPP.getCode().equals(dataDictionaryCustom.getCode())){ mallSalesServiceVo.setWhatsApp(dataDictionaryCustom.getValue()); } List<MallStore> mallStores = mallStoreMapper.selectList(mallStoreQueryWrapper); List<MallStoreVo> mallStoreVos = MallStoreConversion.INSTANCE.entitysToVos(mallStores); return new FebsResponse().success().data(mallStoreVos); if (SalesServiceEnums.PHONE.getCode().equals(dataDictionaryCustom.getCode())){ mallSalesServiceVo.setPhone(dataDictionaryCustom.getValue()); } if (SalesServiceEnums.EMAIL.getCode().equals(dataDictionaryCustom.getCode())){ mallSalesServiceVo.setEmail(dataDictionaryCustom.getValue()); } } @Override public FebsResponse storeItemList(MallStoreItemDto mallStoreItemDto) { QueryWrapper<MallStoreItem> mallStoreQueryWrapper = new QueryWrapper<>(); mallStoreQueryWrapper.like("store_id",mallStoreItemDto.getStoreId()); List<MallStoreItem> mallStores = mallStoreItemMapper.selectList(mallStoreQueryWrapper); return new FebsResponse().success().data(mallStores); } @Override public FebsResponse bindStoreMember(BindStoreMemberDto bindStoreMemberDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); Long storeItemId = bindStoreMemberDto.getStoreItemId(); QueryWrapper<MallStoreMember> objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("member_id",memberId); List<MallStoreMember> mallStoreMembers = mallStoreMemberMapper.selectList(objectQueryWrapper); if(CollUtil.isNotEmpty(mallStoreMembers)){ mallStoreMemberMapper.delete(objectQueryWrapper); } MallMember mallMember = this.baseMapper.selectById(memberId); Integer sex = "女".equals(mallMember.getSex()) ? 3 : 2; MallStoreItem mallStoreItem = mallStoreItemMapper.selectById(storeItemId); HashMap<String, String> objectObjectHashMap = new HashMap<>(); String shopAccount = mallStoreItem.getAccount(); String shopPwd = mallStoreItem.getPassword(); String name = bindStoreMemberDto.getName(); String address = bindStoreMemberDto.getAddress(); Integer age = bindStoreMemberDto.getAge(); String phoneNumber = bindStoreMemberDto.getPhone(); objectObjectHashMap.put("shopAccount",shopAccount); objectObjectHashMap.put("shopPwd",shopPwd); objectObjectHashMap.put("name",name); objectObjectHashMap.put("address",address); objectObjectHashMap.put("age",age.toString()); objectObjectHashMap.put("phoneNumber",phoneNumber); objectObjectHashMap.put("sex",sex.toString()); //sign= MD5(address+age+name+phoneNumber+shopAccount+shopPwd) StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(address); stringBuffer.append(age); stringBuffer.append(name); stringBuffer.append(phoneNumber); stringBuffer.append(sex); stringBuffer.append(shopAccount); stringBuffer.append(shopPwd); String sign = MD5.MD5Encode(stringBuffer.toString()); objectObjectHashMap.put("sign",sign); String url = "https://data.muchun.co/api/bindCustomer"; String result = HttpCurlUtil.sendPost(url, objectObjectHashMap); Integer retCode = JSONUtil.parseObj(result).getInt("retCode"); String message = JSONUtil.parseObj(result).getStr("message"); if(0 != retCode || !"绑定成功".equals(message)){ return new FebsResponse().fail().message(message); } Long bindId = JSONUtil.parseObj(result).getJSONObject("data").getLong("userId"); MallStoreMember mallStoreMember = new MallStoreMember(); mallStoreMember.setMemberId(memberId); mallStoreMember.setBindId(bindId); mallStoreMember.setStoreId(mallStoreItem.getStoreId()); mallStoreMember.setStoreItemId(mallStoreItem.getId()); mallStoreMember.setAccount(shopAccount); mallStoreMember.setPassword(shopPwd); mallStoreMember.setName(name); mallStoreMember.setAddress(address); mallStoreMember.setAge(age); mallStoreMember.setPhone(phoneNumber); mallStoreMemberMapper.insert(mallStoreMember); return new FebsResponse().success().message("绑定成功"); } @Override public FebsResponse bindList() { Long memberId = LoginUserUtil.getLoginUser().getId(); QueryWrapper<MallStoreMember> objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("member_id",memberId); List<MallStoreMember> mallStoreMembers = mallStoreMemberMapper.selectList(objectQueryWrapper); ArrayList<MallStoreMemberVo> mallStoreMemberVos = new ArrayList<>(); for(MallStoreMember mallStoreMember : mallStoreMembers){ MallStoreMemberVo mallStoreMemberVo = new MallStoreMemberVo(); Long storeId = mallStoreMember.getStoreId(); Long storeItemId = mallStoreMember.getStoreItemId(); MallStore mallStore = mallStoreMapper.selectById(storeId); MallStoreItem mallStoreItem = mallStoreItemMapper.selectById(storeItemId); mallStoreMemberVo.setId(mallStoreMember.getId()); mallStoreMemberVo.setBindInfo(mallStore.getName()+"-"+mallStoreItem.getCode()); mallStoreMemberVos.add(mallStoreMemberVo); } return new FebsResponse().success().data(mallStoreMemberVos); } @Override public FebsResponse bindResult(BindResultDto bindResultDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallStoreMember mallStoreMember = mallStoreMemberMapper.selectById(bindResultDto.getBindId()); Long userld = mallStoreMember.getBindId(); String shopAccount = mallStoreMember.getAccount(); String shopPwd = mallStoreMember.getPassword(); HashMap<String, String> objectObjectHashMap = new HashMap<>(); objectObjectHashMap.put("shopAccount",shopAccount); objectObjectHashMap.put("shopPwd",shopPwd); objectObjectHashMap.put("userId",userld.toString()); //sign= MD5(shopAccount+shopPwd+userId) StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(shopAccount); stringBuffer.append(shopPwd); stringBuffer.append(userld); String sign = MD5.MD5Encode(stringBuffer.toString()); objectObjectHashMap.put("sign",sign); String url = "https://data.muchun.co/api/getCustomerCheckRecords"; String result = HttpCurlUtil.sendPost(url, objectObjectHashMap); Integer retCode = JSONUtil.parseObj(result).getInt("retCode"); String message = JSONUtil.parseObj(result).getStr("message"); if(0 != retCode){ return new FebsResponse().fail().message(message); } JSONArray data = JSONUtil.parseObj(result).getJSONArray("data"); return new FebsResponse().success().data(data); return new FebsResponse().success().data(mallSalesServiceVo); } public static void main(String[] args) { src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -93,18 +93,16 @@ @Transactional(rollbackFor = Exception.class) public Long createOrder(AddOrderDto addOrderDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember member = ValidateEntityUtils .ensureColumnReturnEntity(memberId, MallMember::getId, mallMemberMapper::selectOne, "用户不存在"); //订单范围内才允许下单 MallAddressInfo address = ValidateEntityUtils .ensureColumnReturnEntity(addOrderDto.getAddressId(), MallAddressInfo::getId, mallAddressInfoMapper::selectOne, "收货地址信息不存在"); .ensureColumnReturnEntity(addOrderDto.getAddressId(), MallAddressInfo::getId, mallAddressInfoMapper::selectOne, "Please fill in the address first"); String orderNo = MallUtils.getOrderNum(); MallOrderInfo orderInfo = new MallOrderInfo(); orderInfo.setOrderNo(orderNo); orderInfo.setOrderTime(new Date()); orderInfo.setMemberId(member.getId()); orderInfo.setMemberId(memberId); orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue()); orderInfo.setRemark(addOrderDto.getRemark()); orderInfo.setOrderType(addOrderDto.getOrderType()); @@ -115,97 +113,30 @@ this.baseMapper.insert(orderInfo); BigDecimal total = BigDecimal.ZERO; /** * 根据传入的优惠卷ID和商品明细集合计算出每个商品获取的实际支付金额 */ Map<Long, BigDecimal> couponAmountMap = new HashMap<>(); MallMemberCoupon mallMemberCoupon = new MallMemberCoupon(); if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){ Long memberCouponId = addOrderDto.getMemberCouponId(); mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId); if(ObjectUtil.isEmpty(mallMemberCoupon)){ throw new FebsException(mallMemberCoupon.getCouponName()+"无法使用"); } Integer state = mallMemberCoupon.getState(); if(1 != state){ throw new FebsException(mallMemberCoupon.getCouponName()+"无法使用"); } List<AddOrderItemDto> items = addOrderDto.getItems(); couponAmountMap = getCouponAmountMap(memberCouponId, items); } for (AddOrderItemDto item : addOrderDto.getItems()) { MallOrderItem orderItem = new MallOrderItem(); // 积分商品提交订单 if (addOrderDto.getOrderType() == 2) { MallGoods mallGoods = mallGoodsMapper.selectById(item.getSkuId()); if (mallGoods.getStock() < item.getCnt()) { throw new FebsException(mallGoods.getGoodsName() + "库存不足"); } if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) { throw new FebsException(mallGoods.getGoodsName() + "已下架"); } BigDecimal amount = mallGoods.getScore().multiply(BigDecimal.valueOf(item.getCnt())); orderItem.setAmount(amount); orderItem.setCnt(item.getCnt()); orderItem.setOrderId(orderInfo.getId()); orderItem.setPrice(mallGoods.getScore()); orderItem.setGoodsId(mallGoods.getId()); orderItem.setGoodsName(mallGoods.getGoodsName()); orderItem.setStyleName(mallGoods.getGoodsName()); orderItem.setSkuName(mallGoods.getGoodsName()); orderItem.setSkuImage(mallGoods.getThumb()); orderItem.setState(1); if (addOrderDto.getType() == 1) { LambdaQueryWrapper<MallShoppingCart> delQuery = new LambdaQueryWrapper<>(); delQuery.eq(MallShoppingCart::getGoodsId, item.getSkuId()) .eq(MallShoppingCart::getMemberId, member.getId()); mallShoppingCartMapper.delete(delQuery); } total = total.add(amount); } else { MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId()); if (sku == null) { throw new FebsException("购买商品或sku不存在"); throw new FebsException("The product does not exist."); } if (sku.getStock() < item.getCnt()) { throw new FebsException(sku.getSkuName() + "库存不足"); throw new FebsException("Insufficient stock"); } MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId()); // 零撸专区购买 if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) { List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId()); if (CollUtil.isNotEmpty(items)) { throw new FebsException("无法重复领取同一个商品"); } } if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) { throw new FebsException(mallGoods.getGoodsName() + "已下架"); throw new FebsException("Discontinued"); } //商品库存销量计算 Integer goodsResult = mallGoodsMapper.upDateStockAndVolumeByGoodsId(mallGoods.getId(), item.getCnt()); if(1 != goodsResult){ throw new FebsException(mallGoods.getGoodsName() + "库存不足"); throw new FebsException("Discontinued"); } BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())); //是否使用优惠卷 if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){ Long memberCouponId = addOrderDto.getMemberCouponId(); if(ObjectUtil.isNotEmpty(couponAmountMap.get(item.getSkuId()))){ BigDecimal skuCouponAmount = couponAmountMap.get(item.getSkuId());//使用折扣卷后的应该支付的钱 if(skuCouponAmount.compareTo(BigDecimal.ZERO) > 0){ amount = skuCouponAmount; } orderItem.setMemberCouponId(memberCouponId); } } orderItem.setAmount(amount); orderItem.setCnt(item.getCnt()); orderItem.setOrderId(orderInfo.getId()); @@ -214,13 +145,6 @@ orderItem.setGoodsName(sku.getGoodsName()); orderItem.setSkuId(sku.getId()); orderItem.setState(1); if(ObjectUtil.isNotEmpty(member.getReferrerId())){ orderItem.setMemberInviteId(member.getReferrerId()); } if(ObjectUtil.isNotEmpty(addOrderDto.getMemberInviteId())){ orderItem.setMemberInviteId(addOrderDto.getMemberInviteId()); } orderItem.setStyleName(sku.getStyleName()); orderItem.setSkuName(sku.getSkuName()); orderItem.setSkuImage(sku.getSkuImage()); @@ -230,16 +154,13 @@ total = total.add(amount); //规格的库存销量 Integer skuResult = mallGoodsSkuMapper.upDateStockAndVolumeBySkuId(sku.getId(),item.getCnt()); ValidateEntityUtils.ensureEqual(1,skuResult,sku.getSkuName() + "库存不足"); ValidateEntityUtils.ensureEqual(1,skuResult,sku.getSkuName() + "Discontinued"); if (addOrderDto.getType() == 1) { mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId()); } mallShoppingCartMapper.delBySkuId(sku.getId(), memberId); } mallOrderItemMapper.insert(orderItem); } mallMemberCoupon.setState(2); mallMemberCouponMapper.updateById(mallMemberCoupon); //运费 BigDecimal delivaryAmount = addOrderDto.getDeliveryAmount() == null ? BigDecimal.ZERO : addOrderDto.getDeliveryAmount(); orderInfo.setCarriage(delivaryAmount); @@ -247,14 +168,10 @@ total = total.add(delivaryAmount); orderInfo.setAmount(total); orderInfo.setAddressId(address.getId()); orderInfo.setName(address.getName()); orderInfo.setName(address.getFristName() + address.getName()); orderInfo.setPhone(address.getPhone()); orderInfo.setIsHome(addOrderDto.getIsHome()); if (StrUtil.isBlank(address.getLatitude())||StrUtil.isBlank(address.getLongitude())) { throw new FebsException("请添加地址"); } orderInfo.setAddress(address.getProvince()+address.getCity()+address.getArea() + address.getAddress()); orderInfo.setAddress(address.getArea()+ address.getAddress()+address.getCity()+address.getProvince() + address.getCountry() ); orderInfo.setLatitude(address.getLatitude()); orderInfo.setLongitude(address.getLongitude()); this.baseMapper.updateById(orderInfo); @@ -394,11 +311,11 @@ MallMember member = LoginUserUtil.getLoginUser(); MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id); if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); throw new FebsException("Order does not exist"); } if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) { throw new FebsException("订单不是待付款, 无法取消"); throw new FebsException("The order is not pending payment, so it cannot be canceled"); } orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue()); @@ -406,8 +323,6 @@ this.baseMapper.updateById(orderInfo); if (orderInfo.getOrderType() == 2) { // mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount(), MoneyFlowTypeEnum.REFUND.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue()); // memberWalletService.add(orderInfo.getAmount(), member.getId(), "prizeScore"); return; } @@ -416,22 +331,22 @@ for(MallOrderItem mallOrderItem : mallOrderItemList){ MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId()); if (sku == null) { throw new FebsException("购买商品或sku不存在"); throw new FebsException("The product does not exist."); } if (sku.getStock() < mallOrderItem.getCnt()) { throw new FebsException(sku.getSkuName() + "库存不足"); throw new FebsException("Insufficient stock"); } MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId()); Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt()); if(1 != goodsResult){ throw new FebsException(mallGoods.getGoodsName() + "库存不足"); throw new FebsException("Insufficient stock"); } Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt()); if(1 != skuResult){ throw new FebsException(sku.getSkuName() + "库存不足"); throw new FebsException("Insufficient stock"); } Long memberCouponId = mallOrderItem.getMemberCouponId(); MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId); @@ -991,32 +906,23 @@ @Override public FebsResponse createOrderVerify(ApiCreateOrderVerifyDto apiCreateOrderVerifyDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember member = memberMapper.selectById(memberId); List<AddOrderItemDto> items = apiCreateOrderVerifyDto.getItems(); if(CollUtil.isEmpty(items)){ return new FebsResponse().fail().message("请先挑选商品"); return new FebsResponse().fail().message("Please select the product first"); } for (AddOrderItemDto item : apiCreateOrderVerifyDto.getItems()) { MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId()); if (sku == null) { return new FebsResponse().fail().message("购买商品或sku不存在"); return new FebsResponse().fail().message("The product does not exist."); } if (sku.getStock() < item.getCnt()) { return new FebsResponse().fail().message(sku.getSkuName() + "库存不足"); return new FebsResponse().fail().message("Insufficient stock"); } MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId()); if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) { return new FebsResponse().fail().message(mallGoods.getGoodsName() + "已下架"); return new FebsResponse().fail().message("Discontinued"); } if(GoodsTypeEnum.HUO_DONG.getValue() == mallGoods.getIsNormal()){ //活动商品判断是否在活动进行中 MallActivity mallActivity = mallActivityMapper.selectById(mallGoods.getActivityId()); if(mallActivity == null || mallActivity.getState() != 2){ return new FebsResponse().fail().message("活动不在进行中"); } } } return new FebsResponse().success(); src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallShoppingCartServiceImpl.java
@@ -50,41 +50,18 @@ public void addGoodsToCart(List<AddCartDto> addCartDtoList) { Long memberId = LoginUserUtil.getLoginUser().getId(); for (AddCartDto addCartDto : addCartDtoList) { Long goodsId = null; Long skuId = null; Long styleId = null; MallShoppingCart cartGoods = null; if (addCartDto.getType() == null) { addCartDto.setType(1); } if (addCartDto.getType() == 1) { MallGoodsSku sku = mallGoodsSkuMapper.selectById(addCartDto.getSkuId()); if (sku == null) { throw new FebsException("sku不存在"); } goodsId = sku.getGoodsId(); skuId = sku.getId(); styleId = sku.getStyleId(); Long goodsId = sku.getGoodsId(); Long skuId = sku.getId(); Long styleId = sku.getStyleId(); cartGoods = this.baseMapper.selectCartGoodsBySkuId(addCartDto.getSkuId(), memberId); } else { MallGoods mallGoods = mallGoodsMapper.selectById(addCartDto.getSkuId()); if (mallGoods == null) { throw new FebsException("积分商品不存在"); } goodsId = mallGoods.getId(); LambdaQueryWrapper<MallShoppingCart> cartQuery = new LambdaQueryWrapper<>(); cartQuery.eq(MallShoppingCart::getGoodsId, goodsId) .eq(MallShoppingCart::getMemberId, memberId) .last("limit 1"); cartGoods = this.baseMapper.selectOne(cartQuery); } MallShoppingCart cartGoods = this.baseMapper.selectCartGoodsBySkuId(addCartDto.getSkuId(), memberId); if (cartGoods == null) { cartGoods = new MallShoppingCart(); src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberCollectionServiceImpl.java
@@ -1,5 +1,6 @@ package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.mall.dto.AddCollectionDto; @@ -35,12 +36,12 @@ private final IApiMallGoodsService apiMallGoodsService; @Override public void add(AddCollectionDto addCollectionDto) { public FebsResponse add(AddCollectionDto addCollectionDto) { MallMember member = LoginUserUtil.getLoginUser(); MallGoods mallgoods = apiMallGoodsService.getById(addCollectionDto.getGoodsId()); if (mallgoods == null) { throw new FebsException("商品不存在"); throw new FebsException("The product does not exist."); } LambdaQueryWrapper<MallMemberCollection> queryWrapper = new LambdaQueryWrapper<>(); @@ -48,14 +49,15 @@ queryWrapper.eq(MallMemberCollection::getGoodsId, addCollectionDto.getGoodsId()); List<MallMemberCollection> mallMemberCollections = this.baseMapper.selectList(queryWrapper); if (CollUtil.isNotEmpty(mallMemberCollections)) { throw new FebsException("商品已收藏"); throw new FebsException("Product has been favorited"); } MallMemberCollection collection = new MallMemberCollection(); collection.setMemberId(member.getId()); collection.setGoodsId(addCollectionDto.getGoodsId()); this.baseMapper.insert(collection); return new FebsResponse().success().message("Added to favorites"); } @Override src/main/java/cc/mrbird/febs/mall/vo/AddressInfoVo.java
@@ -13,22 +13,32 @@ public class AddressInfoVo { @ApiModelProperty(value = "id") private String id; private Long id; @ApiModelProperty(value = "姓名") @ApiModelProperty(value = "Last name") private String name; @ApiModelProperty(value = "手机号") private String phone; @ApiModelProperty(value = "First name") private String firstName; @ApiModelProperty(value = "地区") private String area; @ApiModelProperty(value = "地址") @ApiModelProperty(value = "Address1") private String address; @ApiModelProperty(value = "是否默认地址 1-是 2-否") private Integer isDefault; @ApiModelProperty(value = "Address2") private String area; @ApiModelProperty(value = "Postcode") private String postcode; @ApiModelProperty(value = "Phone Number") private String phone; @ApiModelProperty(value = "City") private String city; @ApiModelProperty(value = "State / Province") private String province; @ApiModelProperty(value = "Country/Region") private String country; /** * 经度 @@ -41,12 +51,4 @@ */ @ApiModelProperty(value = "纬度") private String latitude; //省 @ApiModelProperty(value = "省") private String province; //市 @ApiModelProperty(value = "市") private String city; } src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java
@@ -14,99 +14,13 @@ @ApiModel(value = "MallMemberVo", description = "商城用户信息返回类") public class MallMemberVo { @ApiModelProperty(value = "id") private Long id; @ApiModelProperty(value = "昵称") private String name; @ApiModelProperty(value = "手机号") private String phone; @ApiModelProperty(value = "邮箱") private String email; @ApiModelProperty(value = "真实姓名") private String realName; @ApiModelProperty(value = "性别") private String sex; @ApiModelProperty(value = "邀请码(如果是团长,邀请码就是团长特征码)") private String inviteId; @ApiModelProperty(value = "头像") private String avatar; @ApiModelProperty(value = "余额") private BigDecimal balance; @ApiModelProperty(value = "代理等级") private String levelName; @ApiModelProperty(value = "推荐人昵称") private String referrerName; private String level; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createdTime; /** * 账户状态;1-正常 2-禁用 */ private Integer accountStatus; public static final int ACCOUNTSTATUS_Y = 1; public static final int ACCOUNTSTATUS_N = 2; @ApiModelProperty(value = "是否设置收款方式", example = "1是2否") private Integer hasPayment = 2; @ApiModelProperty(value = "是否设置交易密码", example = "1是2否") private Integer hasTradePwd = 2; @ApiModelProperty(value = "绑定手机号") private String bindPhone; @ApiModelProperty(value = "累计消费") private BigDecimal totalCost; @ApiModelProperty(value = "赠送积分") private BigDecimal score; @ApiModelProperty(value = "抽奖积分") private BigDecimal prizeScore; @ApiModelProperty(value = "是否是团长 1: 是 2:否") private Integer isTeamLeader; @ApiModelProperty(value = "是否是代理 1: 申请中 2:是 3:否") private Integer isAgent; @ApiModelProperty(value = "代理名称") private String agentLevelName; @ApiModelProperty(value = "代理等级数字 1:一级 2:二级 3:三级") private Integer agentLevel; @ApiModelProperty(value = "收藏数量") private Integer collectionCnt; @ApiModelProperty(value = "足迹数量") private Integer footprintCnt; @ApiModelProperty(value = "足迹数量") private Integer childCnt; @ApiModelProperty(value = "是否是推销员") private Integer isSale; @ApiModelProperty(value = "会员信息") private MallVipConfig vipInfo; @ApiModelProperty(value = "生日") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date birthday; } src/main/java/cc/mrbird/febs/mall/vo/MallSalesServiceVo.java
New file @@ -0,0 +1,20 @@ package cc.mrbird.febs.mall.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "MallSalesServiceVo", description = "地址信息返回参数类") public class MallSalesServiceVo { @ApiModelProperty(value = "whatsApp") private String whatsApp; @ApiModelProperty(value = "phone") private String phone; @ApiModelProperty(value = "email") private String email; }