diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractImageTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractImageTypeEnum.java new file mode 100644 index 0000000..a7517ee --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractImageTypeEnum.java @@ -0,0 +1,36 @@ +package com.qniao.dam.domian.aggregate.contract.constant; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +@Getter +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +public enum ContractImageTypeEnum { + + PIC(1, "图片"), + + FILE(2, "文件"); + + @EnumValue + @JsonValue + private final Integer value; + private final String desc; + + ContractImageTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator + public static ContractImageTypeEnum get(Object code) { + for (ContractImageTypeEnum e : ContractImageTypeEnum.values()) { + if (e.getValue().equals(code)) { + return e; + } + } + return null; + } +} diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractStatusEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractStatusEnum.java new file mode 100644 index 0000000..638932b --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractStatusEnum.java @@ -0,0 +1,48 @@ +package com.qniao.dam.domian.aggregate.contract.constant; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +@Getter +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +public enum ContractStatusEnum { + /** + * 未开始 + */ + NOT_STARTED(1, "未开始"), + /** + * 生效中 + */ + IN_EFFECT(2, "生效中"), + /** + * 已结束 + */ + OVER(3, "已结束"), + /** + * 已废弃 + */ + OBSOLETED(4, "已废弃"); + + @EnumValue + @JsonValue + private final Integer value; + private final String desc; + + ContractStatusEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator + public static ContractStatusEnum get(Integer value) { + for (ContractStatusEnum e : ContractStatusEnum.values()) { + if (e.getValue().equals(value)) { + return e; + } + } + return null; + } +} diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractTermNameEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractTermNameEnum.java new file mode 100644 index 0000000..5221eb2 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractTermNameEnum.java @@ -0,0 +1,36 @@ +package com.qniao.dam.domian.aggregate.contract.constant; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +@Getter +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +public enum ContractTermNameEnum { + + PIC(1, "图片"), + + FILE(2, "文件"); + + @EnumValue + @JsonValue + private final Integer value; + private final String desc; + + ContractTermNameEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator + public static ContractTermNameEnum get(Object code) { + for (ContractTermNameEnum e : ContractTermNameEnum.values()) { + if (e.getValue().equals(code)) { + return e; + } + } + return null; + } +} \ No newline at end of file diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractTermUnitEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractTermUnitEnum.java new file mode 100644 index 0000000..3b39cef --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/contract/constant/ContractTermUnitEnum.java @@ -0,0 +1,36 @@ +package com.qniao.dam.domian.aggregate.contract.constant; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +@Getter +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +public enum ContractTermUnitEnum { + + PIC(1, "图片"), + + FILE(2, "文件"); + + @EnumValue + @JsonValue + private final Integer value; + private final String desc; + + ContractTermUnitEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator + public static ContractTermUnitEnum get(Object code) { + for (ContractTermUnitEnum e : ContractTermUnitEnum.values()) { + if (e.getValue().equals(code)) { + return e; + } + } + return null; + } +} \ No newline at end of file diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/entity/Contract.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/entity/Contract.java new file mode 100644 index 0000000..c1de801 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/entity/Contract.java @@ -0,0 +1,68 @@ +package com.qniao.dam.domain.aggregate.contract.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domain.aggregate.contract.valobj.ContractImage; +import com.qniao.dam.domain.aggregate.contract.valobj.ContractTerm; +import com.qniao.dam.domian.aggregate.contract.constant.ContractStatusEnum; +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; +import java.util.List; + +/** + * 合同 + * + * @date 2025/07/10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_contract") +public class Contract extends Entity { + + @ApiModelProperty("甲方身份类型") + private IdentityTypeEnum firstPartyIdentityType; + + @ApiModelProperty("甲方标识") + private Long firstPartyId; + + @ApiModelProperty("甲方经办人名称") + private String firstPartyName; + + @ApiModelProperty("甲方身份编号 身份证、统一信用代码") + private String firstPartyIdentityNo; + + @ApiModelProperty("乙方身份类型") + private IdentityTypeEnum secondPartyIdentityType; + + @ApiModelProperty("乙方标识") + private Long secondPartyId; + + @ApiModelProperty("乙方经办人名称") + private String secondPartyName; + + @ApiModelProperty("乙方身份编号 身份证、统一信用代码") + private String secondPartyIdentityNo; + + @ApiModelProperty("签订日期") + private LocalDateTime signDate; + + @ApiModelProperty("开始日期") + private LocalDateTime startDate; + + @ApiModelProperty("开始日期") + private LocalDateTime endDate; + + @ApiModelProperty("状态 已生效、已结束、已终止") + private ContractStatusEnum status; + + @ApiModelProperty("合同备注") + private String remark; + + private transient List contractTermList; + + private transient List contractImageList; +} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/valobj/ContractImage.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/valobj/ContractImage.java new file mode 100644 index 0000000..3201d69 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/valobj/ContractImage.java @@ -0,0 +1,23 @@ +package com.qniao.dam.domain.aggregate.contract.valobj; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domian.aggregate.contract.constant.ContractImageTypeEnum; +import com.qniao.domain.ValueObject; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_contract_image") +public class ContractImage extends ValueObject { + + @ApiModelProperty("合同唯一标识") + private Long contractId; + + @ApiModelProperty("影像类型") + private ContractImageTypeEnum type; + + @ApiModelProperty("url") + private String url; +} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/valobj/ContractTerm.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/valobj/ContractTerm.java new file mode 100644 index 0000000..ed572b4 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/contract/valobj/ContractTerm.java @@ -0,0 +1,31 @@ +package com.qniao.dam.domain.aggregate.contract.valobj; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domian.aggregate.contract.constant.ContractTermNameEnum; +import com.qniao.dam.domian.aggregate.contract.constant.ContractTermUnitEnum; +import com.qniao.domain.ValueObject; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_contract_term") +public class ContractTerm extends ValueObject { + + @ApiModelProperty("合同唯一标识") + private Long contractId; + + @ApiModelProperty("名称") + private ContractTermNameEnum name; + + @ApiModelProperty("展示名称") + private String displayName; + + @ApiModelProperty("类型") + private ContractTermUnitEnum type; + + @ApiModelProperty("数值") + private String value; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/ContractUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/ContractUserCommandController.java new file mode 100644 index 0000000..059d0ff --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/ContractUserCommandController.java @@ -0,0 +1,40 @@ +package com.qniao.dam.api.command.contract.user; + +import com.qniao.dam.api.command.contract.user.request.*; +import com.qniao.dam.application.service.contract.ContractApplicationService; +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 ContractUserCommandController { + + @Resource + private ContractApplicationService contractApplicationService; + + @ApiOperation("用户创建合同") + @PostMapping("create/contract") + public void userCreateContract(@RequestBody @Valid UserCreateContractDto dto, + @RequestParam("userId") Long userId) { + contractApplicationService.create(dto.trans2Domain()); + } + + @ApiOperation("用户编辑合同") + @PostMapping("edit/contract") + public void userEditContract(@RequestBody @Valid UserEditContractDto dto, + @RequestParam("userId") Long userId) { + contractApplicationService.edit(dto.trans2Domain()); + } + + @ApiOperation("用户删除合同") + @PostMapping("delete/contract") + public void userDeleteContract(@RequestBody @Valid UserDeleteContractDto dto, + @RequestParam("userId") Long userId) { + contractApplicationService.delete(dto.getId()); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/request/UserCreateContractDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/request/UserCreateContractDto.java new file mode 100644 index 0000000..01e8918 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/request/UserCreateContractDto.java @@ -0,0 +1,56 @@ +package com.qniao.dam.api.command.contract.user.request; + +import com.qniao.dam.domain.aggregate.contract.entity.Contract; +import com.qniao.domain.Trans2DomainAssembler; +import io.swagger.annotations.ApiModelProperty; +import com.qniao.framework.utils.TypeConvertUtils; +import lombok.Data; + +@Data +public class UserCreateContractDto implements Trans2DomainAssembler { + + + @ApiModelProperty("甲方身份类型") + private Byte firstPartyIdentityType; + + @ApiModelProperty("甲方标识") + private Long firstPartyId; + + @ApiModelProperty("甲方经办人名称") + private String firstPartyName; + + @ApiModelProperty("甲方身份编号 身份证、统一信用代码") + private String firstPartyIdentityNo; + + @ApiModelProperty("乙方身份类型") + private Byte secondPartyIdentityType; + + @ApiModelProperty("乙方标识") + private Long secondPartyId; + + @ApiModelProperty("乙方经办人名称") + private String secondPartyName; + + @ApiModelProperty("乙方身份编号 身份证、统一信用代码") + private String secondPartyIdentityNo; + + @ApiModelProperty("签订日期") + private LocalDateTime signDate; + + @ApiModelProperty("开始日期") + private LocalDateTime startDate; + + @ApiModelProperty("开始日期") + private LocalDateTime endDate; + + @ApiModelProperty("状态 已生效、已结束、已终止") + private Byte status; + + @ApiModelProperty("合同备注") + private String remark; + + @Override + public Contract trans2Domain() { + return TypeConvertUtils.convert(this, Contract.class); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/request/UserDeleteContractDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/request/UserDeleteContractDto.java new file mode 100644 index 0000000..632e07e --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/request/UserDeleteContractDto.java @@ -0,0 +1,12 @@ +package com.qniao.dam.api.command.contract.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserDeleteContractDto { + + @ApiModelProperty("唯一标识") + private Long id; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/request/UserEditContractDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/request/UserEditContractDto.java new file mode 100644 index 0000000..d2c8cfa --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/contract/user/request/UserEditContractDto.java @@ -0,0 +1,59 @@ +package com.qniao.dam.api.command.contract.user.request; + +import com.qniao.dam.domain.aggregate.contract.entity.Contract; +import com.qniao.domain.Trans2DomainAssembler; +import io.swagger.annotations.ApiModelProperty; +import com.qniao.framework.utils.TypeConvertUtils; +import lombok.Data; + +@Data +public class UserEditContractDto implements Trans2DomainAssembler { + + + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("甲方身份类型") + private Byte firstPartyIdentityType; + + @ApiModelProperty("甲方标识") + private Long firstPartyId; + + @ApiModelProperty("甲方经办人名称") + private String firstPartyName; + + @ApiModelProperty("甲方身份编号 身份证、统一信用代码") + private String firstPartyIdentityNo; + + @ApiModelProperty("乙方身份类型") + private Byte secondPartyIdentityType; + + @ApiModelProperty("乙方标识") + private Long secondPartyId; + + @ApiModelProperty("乙方经办人名称") + private String secondPartyName; + + @ApiModelProperty("乙方身份编号 身份证、统一信用代码") + private String secondPartyIdentityNo; + + @ApiModelProperty("签订日期") + private LocalDateTime signDate; + + @ApiModelProperty("开始日期") + private LocalDateTime startDate; + + @ApiModelProperty("开始日期") + private LocalDateTime endDate; + + @ApiModelProperty("状态 已生效、已结束、已终止") + private Byte status; + + @ApiModelProperty("合同备注") + private String remark; + + @Override + public Contract trans2Domain() { + return TypeConvertUtils.convert(this, Contract.class); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/contract/ContractApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/contract/ContractApplicationService.java new file mode 100644 index 0000000..5c9805f --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/contract/ContractApplicationService.java @@ -0,0 +1,26 @@ +package com.qniao.dam.application.service.contract; + +import com.qniao.dam.domain.aggregate.contract.ContractAggregate; +import com.qniao.dam.domain.aggregate.contract.entity.Contract; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class ContractApplicationService { + + @Resource + private ContractAggregate contractAggregate; + + public void create(Contract contract) { + contractAggregate.create(contract); + } + + public void edit(Contract contract) { + contractAggregate.edit(contract); + } + + public void delete(Long id) { + contractAggregate.delete(id); + } +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/contract/ContractAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/contract/ContractAggregate.java new file mode 100644 index 0000000..df204b7 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/contract/ContractAggregate.java @@ -0,0 +1,31 @@ +package com.qniao.dam.domain.aggregate.contract; + +import com.qniao.dam.domain.aggregate.contract.entity.Contract; +import com.qniao.dam.domain.aggregate.contract.repository.ContractRepository; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 合同 + * + * @date 2025/07/10 + */ +@Service +public class ContractAggregate { + + @Resource + private ContractRepository repository; + + public void create(Contract entity) { + repository.save(entity); + } + + public void edit(Contract 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/contract/repository/ContractRepository.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/contract/repository/ContractRepository.java new file mode 100644 index 0000000..56c07d5 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/contract/repository/ContractRepository.java @@ -0,0 +1,12 @@ +package com.qniao.dam.domain.aggregate.contract.repository; + +import com.qniao.dam.domain.aggregate.contract.entity.Contract; +import com.qniao.domain.Repository; + +/** + * 合同 + * + * @date 2025/07/10 + */ +public interface ContractRepository extends Repository { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/contract/ContractDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/contract/ContractDao.java new file mode 100644 index 0000000..d4c9618 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/contract/ContractDao.java @@ -0,0 +1,12 @@ +package com.qniao.dam.infrastructure.persistent.dao.contract; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qniao.dam.domain.aggregate.contract.entity.Contract; + +/** + * 合同 + * + * @date 2025/07/10 + */ +public interface ContractDao extends BaseMapper { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ContractRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ContractRepositoryImpl.java new file mode 100644 index 0000000..0efba20 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/ContractRepositoryImpl.java @@ -0,0 +1,41 @@ +package com.qniao.dam.infrastructure.persistent.repository.impl; + +import com.qniao.dam.domain.aggregate.contract.entity.Contract; +import com.qniao.dam.domain.aggregate.contract.repository.ContractRepository; +import com.qniao.dam.infrastructure.persistent.dao.contract.ContractDao; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * 合同 + * + * @date 2025/07/10 + */ +@Service +public class ContractRepositoryImpl implements ContractRepository { + + @Resource + private ContractDao dao; + + @Override + public Contract load(Long id) { + return dao.selectById(id); + } + + @Override + public Long save(Contract 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/contract/ContractQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/ContractQueryService.java new file mode 100644 index 0000000..0e9865d --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/ContractQueryService.java @@ -0,0 +1,5 @@ +package com.qniao.dam.query.contract; + +public interface ContractQueryService { + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/impl/ContractQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/impl/ContractQueryServiceImpl.java new file mode 100644 index 0000000..632fc41 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/contract/impl/ContractQueryServiceImpl.java @@ -0,0 +1,9 @@ +package com.qniao.dam.query.contract.impl; + +import com.qniao.dam.query.contract.ContractQueryService; +import org.springframework.stereotype.Service; + +@Service +public class ContractQueryServiceImpl implements ContractQueryService { + +} \ No newline at end of file