diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/BankCardUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/BankCardUserCommandController.java new file mode 100644 index 0000000..551e7e6 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/BankCardUserCommandController.java @@ -0,0 +1,38 @@ +package com.qniao.dam.api.command.bankcard.user; + +import com.qniao.dam.api.command.bankcard.user.request.*; +import com.qniao.dam.application.service.bankcard.BankCardApplicationService; +import com.qniao.dam.domain.aggregate.bankcard.entity.BankCard; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Api(tags = "银行卡") +@RestController +@RequestMapping("user") +public class BankCardUserCommandController { + + @Resource + private BankCardApplicationService bankCardApplicationService; + + @ApiOperation("用户个人创建银行卡") + @PostMapping("create/bank-card/by-individual") + public void userCreateBankCardByIndividual(@RequestBody @Valid UserCreateBankCardDto dto, + @RequestParam("userId") Long userId) { + BankCard bankCard = dto.trans2Domain(); + bankCard.setUserId(userId); + bankCard.setIdentityType(IdentityTypeEnum.INDIVIDUAL); + bankCardApplicationService.create(dto.trans2Domain()); + } + + @ApiOperation("用户删除银行卡") + @PostMapping("delete/bank-card") + public void userDeleteBankCard(@RequestBody @Valid UserDeleteBankCardDto dto, + @RequestParam("userId") Long userId) { + bankCardApplicationService.delete(dto.getId()); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/request/UserCreateBankCardDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/request/UserCreateBankCardDto.java new file mode 100644 index 0000000..ac46d62 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/request/UserCreateBankCardDto.java @@ -0,0 +1,39 @@ +package com.qniao.dam.api.command.bankcard.user.request; + +import com.qniao.dam.domain.aggregate.bankcard.entity.BankCard; +import com.qniao.domain.Trans2DomainAssembler; +import io.swagger.annotations.ApiModelProperty; +import com.qniao.framework.utils.TypeConvertUtils; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +@Data +public class UserCreateBankCardDto implements Trans2DomainAssembler { + + @ApiModelProperty("持卡人姓名") + @NotNull(message = "持卡人姓名不能为空") + @Size(max = 32, message = "持卡人姓名不超过32个字符") + private String ownerName; + + @ApiModelProperty("银行") + @NotNull(message = "银行不能为空") + @Size(max = 32, message = "银行不超过32个字符") + private String bankName; + + @ApiModelProperty("卡号") + @NotNull(message = "卡号不能为空") + @Size(max = 32, message = "卡号不超过32个字符") + private String cardNum; + + @ApiModelProperty("开户支行") + @NotNull(message = "开户支行不能为空") + @Size(max = 100, message = "开户支行不超过100个字符") + private String openingBank; + + @Override + public BankCard trans2Domain() { + return TypeConvertUtils.convert(this, BankCard.class); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/request/UserDeleteBankCardDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/request/UserDeleteBankCardDto.java new file mode 100644 index 0000000..b3bfd8c --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/request/UserDeleteBankCardDto.java @@ -0,0 +1,12 @@ +package com.qniao.dam.api.command.bankcard.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserDeleteBankCardDto { + + @ApiModelProperty("唯一标识") + private Long id; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/request/UserEditBankCardDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/request/UserEditBankCardDto.java new file mode 100644 index 0000000..61a5bfc --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/bankcard/user/request/UserEditBankCardDto.java @@ -0,0 +1,41 @@ +package com.qniao.dam.api.command.bankcard.user.request; + +import com.qniao.dam.domain.aggregate.bankcard.entity.BankCard; +import com.qniao.domain.Trans2DomainAssembler; +import io.swagger.annotations.ApiModelProperty; +import com.qniao.framework.utils.TypeConvertUtils; +import lombok.Data; + +@Data +public class UserEditBankCardDto implements Trans2DomainAssembler { + + + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("用户唯一标识") + private Long userId; + + @ApiModelProperty("组织唯一标识") + private Long orgId; + + @ApiModelProperty("身份类型(个人、组织)") + private Integer identityType; + + @ApiModelProperty("持卡人姓名") + private String ownerName; + + @ApiModelProperty("银行") + private String bankName; + + @ApiModelProperty("卡号") + private String cardNum; + + @ApiModelProperty("开户支行") + private String openingBank; + + @Override + public BankCard trans2Domain() { + return TypeConvertUtils.convert(this, BankCard.class); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/bankcard/user/BankCardUserQueryController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/bankcard/user/BankCardUserQueryController.java new file mode 100644 index 0000000..e8ad0d3 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/bankcard/user/BankCardUserQueryController.java @@ -0,0 +1,30 @@ +package com.qniao.dam.api.query.bankcard.user; + +import com.qniao.dam.api.query.bankcard.user.response.BankCardVo; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; +import com.qniao.dam.query.bankcard.BankCardQueryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +@Api(tags = "银行卡") +@RestController +@RequestMapping("user") +public class BankCardUserQueryController { + + @Resource + private BankCardQueryService bankCardQueryService; + + @GetMapping("list/bank-card/by-individual") + @ApiOperation("用户银行卡列表") + public List userListBankCardByIndividual(@RequestParam("userId") Long userId) { + return bankCardQueryService.listBankCardVo(userId, null, IdentityTypeEnum.INDIVIDUAL); + } + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/bankcard/user/response/BankCardVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/bankcard/user/response/BankCardVo.java new file mode 100644 index 0000000..5ebe162 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/bankcard/user/response/BankCardVo.java @@ -0,0 +1,27 @@ +package com.qniao.dam.api.query.bankcard.user.response; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class BankCardVo { + + @ApiModelProperty("唯一标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("持卡人姓名") + private String ownerName; + + @ApiModelProperty("银行") + private String bankName; + + @ApiModelProperty("卡号") + private String cardNum; + + @ApiModelProperty("开户支行") + private String openingBank; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/bankcard/BankCardApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/bankcard/BankCardApplicationService.java new file mode 100644 index 0000000..c618e1c --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/bankcard/BankCardApplicationService.java @@ -0,0 +1,36 @@ +package com.qniao.dam.application.service.bankcard; + +import com.qniao.dam.domain.aggregate.bankcard.BankCardAggregate; +import com.qniao.dam.domain.aggregate.bankcard.entity.BankCard; +import com.qniao.dam.query.bankcard.BankCardQueryService; +import com.qniao.framework.exception.BizException; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +@Service +public class BankCardApplicationService { + + @Resource + private BankCardAggregate bankCardAggregate; + @Resource + private BankCardQueryService bankCardQueryService; + + public void create(BankCard bankCard) { + BankCard existBankCard = bankCardQueryService.queryBy(bankCard.getUserId(), bankCard.getOrgId(), bankCard.getIdentityType(), bankCard.getCardNum()); + if (Objects.nonNull(existBankCard)) { + throw new BizException("银行卡已存在"); + } else { + bankCardAggregate.create(bankCard); + } + } + + public void edit(BankCard bankCard) { + bankCardAggregate.edit(bankCard); + } + + public void delete(Long id) { + bankCardAggregate.delete(id); + } +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/bankcard/BankCardAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/bankcard/BankCardAggregate.java new file mode 100644 index 0000000..3f8160e --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/bankcard/BankCardAggregate.java @@ -0,0 +1,31 @@ +package com.qniao.dam.domain.aggregate.bankcard; + +import com.qniao.dam.domain.aggregate.bankcard.entity.BankCard; +import com.qniao.dam.domain.aggregate.bankcard.repository.BankCardRepository; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 银行卡 + * + * @date 2024/11/14 + */ +@Service +public class BankCardAggregate { + + @Resource + private BankCardRepository repository; + + public void create(BankCard entity) { + repository.save(entity); + } + + public void edit(BankCard entity) { + repository.save(entity); + } + + public void delete(Long id) { + repository.delete(id); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/bankcard/entity/BankCard.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/bankcard/entity/BankCard.java new file mode 100644 index 0000000..910c053 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/bankcard/entity/BankCard.java @@ -0,0 +1,44 @@ +package com.qniao.dam.domain.aggregate.bankcard.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.qniao.domain.Entity; +import java.time.LocalDateTime; + +/** + * 银行卡 + * + * @date 2024/11/14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_bank_card") +public class BankCard extends Entity { + + + @ApiModelProperty("用户唯一标识") + private Long userId; + + @ApiModelProperty("组织唯一标识") + private Long orgId; + + @ApiModelProperty("身份类型(个人、组织)") + private IdentityTypeEnum identityType; + + @ApiModelProperty("持卡人姓名") + private String ownerName; + + @ApiModelProperty("银行") + private String bankName; + + @ApiModelProperty("卡号") + private String cardNum; + + @ApiModelProperty("开户支行") + private String openingBank; + + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/bankcard/repository/BankCardRepository.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/bankcard/repository/BankCardRepository.java new file mode 100644 index 0000000..2777afa --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/bankcard/repository/BankCardRepository.java @@ -0,0 +1,12 @@ +package com.qniao.dam.domain.aggregate.bankcard.repository; + +import com.qniao.dam.domain.aggregate.bankcard.entity.BankCard; +import com.qniao.domain.Repository; + +/** + * 银行卡 + * + * @date 2024/11/14 + */ +public interface BankCardRepository extends Repository { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/bankcard/BankCardDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/bankcard/BankCardDao.java new file mode 100644 index 0000000..3b9c6b5 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/bankcard/BankCardDao.java @@ -0,0 +1,12 @@ +package com.qniao.dam.infrastructure.persistent.dao.bankcard; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qniao.dam.domain.aggregate.bankcard.entity.BankCard; + +/** + * 银行卡 + * + * @date 2024/11/14 + */ +public interface BankCardDao extends BaseMapper { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/BankCardViewDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/BankCardViewDao.java new file mode 100644 index 0000000..7cf9036 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/BankCardViewDao.java @@ -0,0 +1,15 @@ +package com.qniao.dam.infrastructure.persistent.dao.view; + +import com.qniao.dam.api.query.bankcard.user.response.BankCardVo; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface BankCardViewDao { + List listBankCard(@Param("userId") Long userId, + @Param("orgId") Long orgId, + @Param("identityType") IdentityTypeEnum identityType); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/BankCardRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/BankCardRepositoryImpl.java new file mode 100644 index 0000000..b36c477 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/BankCardRepositoryImpl.java @@ -0,0 +1,41 @@ +package com.qniao.dam.infrastructure.persistent.repository.impl; + +import com.qniao.dam.domain.aggregate.bankcard.entity.BankCard; +import com.qniao.dam.domain.aggregate.bankcard.repository.BankCardRepository; +import com.qniao.dam.infrastructure.persistent.dao.bankcard.BankCardDao; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * 银行卡 + * + * @date 2024/11/14 + */ +@Service +public class BankCardRepositoryImpl implements BankCardRepository { + + @Resource + private BankCardDao dao; + + @Override + public BankCard load(Long id) { + return dao.selectById(id); + } + + @Override + public Long save(BankCard entity) { + if (Objects.isNull(entity) || Objects.isNull(dao.selectById(entity.getId()))) { + dao.insert(entity); + } else { + dao.updateById(entity); + } + return entity.getId(); + } + + @Override + public void delete(Long id) { + dao.deleteById(id); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/bankcard/BankCardQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/bankcard/BankCardQueryService.java new file mode 100644 index 0000000..4c376ce --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/bankcard/BankCardQueryService.java @@ -0,0 +1,14 @@ +package com.qniao.dam.query.bankcard; + +import com.qniao.dam.api.query.bankcard.user.response.BankCardVo; +import com.qniao.dam.domain.aggregate.bankcard.entity.BankCard; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; + +import java.util.List; + +public interface BankCardQueryService { + + BankCard queryBy(Long userId, Long orgId, IdentityTypeEnum identityType, String cardNum); + + List listBankCardVo(Long userId, Long orgId, IdentityTypeEnum identityType); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/bankcard/impl/BankCardQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/bankcard/impl/BankCardQueryServiceImpl.java new file mode 100644 index 0000000..71bb07b --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/bankcard/impl/BankCardQueryServiceImpl.java @@ -0,0 +1,42 @@ +package com.qniao.dam.query.bankcard.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qniao.dam.api.query.bankcard.user.response.BankCardVo; +import com.qniao.dam.domain.aggregate.bankcard.entity.BankCard; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; +import com.qniao.dam.infrastructure.persistent.dao.bankcard.BankCardDao; +import com.qniao.dam.infrastructure.persistent.dao.view.BankCardViewDao; +import com.qniao.dam.query.bankcard.BankCardQueryService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class BankCardQueryServiceImpl implements BankCardQueryService { + + @Resource + private BankCardDao bankCardDao; + @Resource + private BankCardViewDao bankCardViewDao; + + @Override + public BankCard queryBy(Long userId, Long orgId, IdentityTypeEnum identityType, String cardNum) { + if (IdentityTypeEnum.INDIVIDUAL.equals(identityType)) { + return bankCardDao.selectOne(new LambdaQueryWrapper() + .eq(BankCard::getUserId, userId) + .eq(BankCard::getCardNum, cardNum) + .last("limit 1")); + } else { + return bankCardDao.selectOne(new LambdaQueryWrapper() + .eq(BankCard::getOrgId, orgId) + .eq(BankCard::getCardNum, cardNum) + .last("limit 1")); + } + } + + @Override + public List listBankCardVo(Long userId, Long orgId, IdentityTypeEnum identityType) { + return bankCardViewDao.listBankCard(userId,orgId,identityType); + } +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/resources/mapper/bankcard/BankCardMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/bankcard/BankCardMapper.xml new file mode 100644 index 0000000..b76ebd9 --- /dev/null +++ b/dating-agency-mall-server/src/main/resources/mapper/bankcard/BankCardMapper.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file