diff --git a/dating-agency-mall-server/pom.xml b/dating-agency-mall-server/pom.xml index ddb470b..9e64e7d 100644 --- a/dating-agency-mall-server/pom.xml +++ b/dating-agency-mall-server/pom.xml @@ -101,6 +101,11 @@ dating-agency-service-entity 0.0.1-SNAPSHOT + + com.qniao + dating-clue-service-entity + 0.0.1-SNAPSHOT + com.qniao dating-agency-uec-sdk diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/ContractUserQueryController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/ContractUserQueryController.java new file mode 100644 index 0000000..d16021d --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/ContractUserQueryController.java @@ -0,0 +1,33 @@ +package com.qniao.dam.api.query.contract.user; + +import com.qniao.dam.api.query.contract.user.request.UserPageCustomizedServiceContractQueryParams; +import com.qniao.dam.api.query.contract.user.response.UserPageCustomizedServiceContractVo; +import com.qniao.dam.query.contract.ContractQueryService; +import com.qniao.dau.infrastructure.constant.RequestHeaderFields; +import com.qniao.domain.QnPage; +import com.qniao.framework.utils.PageUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@Api(tags = "合同") +@RestController +@RequestMapping("user") +public class ContractUserQueryController { + + @Resource + private ContractQueryService contractQueryService; + + @GetMapping("page/customized-service-contract/by-dating-store") + @ApiOperation("线下门店查询合同列表 -- 线下门店") + public QnPage userPageCustomizedServiceContractByDatingStore(PageUtil pageUtil, + UserPageCustomizedServiceContractQueryParams queryParams, + @RequestParam(value = "userId") Long userId, + @RequestHeader(name = RequestHeaderFields.FIELD_ORGANIZATION_ID) Long orgId) { + queryParams.setDatingStoreOrgId(orgId); + return PageUtil.convert(contractQueryService.pageCustomizedServiceContract(queryParams, pageUtil), UserPageCustomizedServiceContractVo.class); + } + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/request/UserPageCustomizedServiceContractQueryParams.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/request/UserPageCustomizedServiceContractQueryParams.java new file mode 100644 index 0000000..9a3db17 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/request/UserPageCustomizedServiceContractQueryParams.java @@ -0,0 +1,34 @@ +package com.qniao.dam.api.query.contract.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +@Data +public class UserPageCustomizedServiceContractQueryParams { + + private Long datingStoreOrgId; + + @ApiModelProperty("客户姓名") + private String datingStoreCustomerName; + + @ApiModelProperty("客户身份证") + private String datingStoreCustomerIdentityNo; + + @ApiModelProperty("客户联系号码") + private String datingStoreCustomerPhone; + + @ApiModelProperty("签订日期开始") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate signDateFrom; + + @ApiModelProperty("签订日期结束") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate signDateTo; + + @ApiModelProperty("状态") + private Integer status; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/response/ContractImageVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/response/ContractImageVo.java new file mode 100644 index 0000000..085f6bc --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/response/ContractImageVo.java @@ -0,0 +1,22 @@ +package com.qniao.dam.api.query.contract.user.response; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.qniao.dam.domian.aggregate.contract.constant.ContractImageTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ContractImageVo { + + @ApiModelProperty("合同唯一标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long contractId; + + @ApiModelProperty("影像类型") + private ContractImageTypeEnum type; + + @ApiModelProperty("url") + private String url; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/response/ContractTermVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/response/ContractTermVo.java new file mode 100644 index 0000000..4b1e69e --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/response/ContractTermVo.java @@ -0,0 +1,29 @@ +package com.qniao.dam.api.query.contract.user.response; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.qniao.dam.domian.aggregate.contract.constant.ContractTermNameEnum; +import com.qniao.dam.domian.aggregate.contract.constant.ContractTermUnitEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ContractTermVo { + + @ApiModelProperty("合同唯一标识") + @JsonSerialize(using = ToStringSerializer.class) + 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/query/contract/user/response/UserPageCustomizedServiceContractVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/response/UserPageCustomizedServiceContractVo.java new file mode 100644 index 0000000..2749983 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/contract/user/response/UserPageCustomizedServiceContractVo.java @@ -0,0 +1,72 @@ +package com.qniao.dam.api.query.contract.user.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +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 java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +@Data +public class UserPageCustomizedServiceContractVo { + + @ApiModelProperty("唯一标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("甲方身份类型") + private IdentityTypeEnum firstPartyIdentityType; + + @ApiModelProperty("甲方标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long firstPartyId; + + @ApiModelProperty("甲方经办人名称") + private String firstPartyName; + + @ApiModelProperty("甲方身份编号 身份证、统一信用代码") + private String firstPartyIdentityNo; + + @ApiModelProperty("乙方身份类型") + private IdentityTypeEnum secondPartyIdentityType; + + @ApiModelProperty("乙方标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long secondPartyId; + + @ApiModelProperty("乙方经办人名称") + private String secondPartyName; + + @ApiModelProperty("乙方身份编号 身份证、统一信用代码") + private String secondPartyIdentityNo; + + @ApiModelProperty("合同金额") + private BigDecimal amount; + + @ApiModelProperty("签订日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate signDate; + + @ApiModelProperty("开始日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate startDate; + + @ApiModelProperty("开始日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate endDate; + + @ApiModelProperty("状态") + private ContractStatusEnum status; + + @ApiModelProperty("合同备注") + private String remark; + + private List contractTermList; + + private List contractImageList; +} 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 index d4c9618..b411635 100644 --- 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 @@ -1,7 +1,12 @@ package com.qniao.dam.infrastructure.persistent.dao.contract; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.qniao.dam.api.query.contract.user.request.UserPageCustomizedServiceContractQueryParams; +import com.qniao.dam.api.query.contract.user.response.UserPageCustomizedServiceContractVo; import com.qniao.dam.domain.aggregate.contract.entity.Contract; +import org.apache.ibatis.annotations.Param; /** * 合同 @@ -9,4 +14,8 @@ import com.qniao.dam.domain.aggregate.contract.entity.Contract; * @date 2025/07/10 */ public interface ContractDao extends BaseMapper { + + IPage pageCustomizedServiceContract(Page pageWithoutOrders, + @Param("queryParams") UserPageCustomizedServiceContractQueryParams queryParams); + } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/contract/ContractImageDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/contract/ContractImageDao.java new file mode 100644 index 0000000..5864def --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/contract/ContractImageDao.java @@ -0,0 +1,7 @@ +package com.qniao.dam.infrastructure.persistent.dao.contract; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qniao.dam.domain.aggregate.contract.valobj.ContractImage; + +public interface ContractImageDao extends BaseMapper { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/contract/ContractTermDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/contract/ContractTermDao.java new file mode 100644 index 0000000..4e44c1d --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/contract/ContractTermDao.java @@ -0,0 +1,7 @@ +package com.qniao.dam.infrastructure.persistent.dao.contract; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qniao.dam.domain.aggregate.contract.valobj.ContractTerm; + +public interface ContractTermDao 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 index 0efba20..ba851df 100644 --- 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 @@ -1,9 +1,13 @@ package com.qniao.dam.infrastructure.persistent.repository.impl; +import cn.hutool.core.collection.CollUtil; 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 com.qniao.dam.infrastructure.persistent.dao.contract.ContractImageDao; +import com.qniao.dam.infrastructure.persistent.dao.contract.ContractTermDao; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Objects; @@ -18,12 +22,17 @@ public class ContractRepositoryImpl implements ContractRepository { @Resource private ContractDao dao; + @Resource + private ContractTermDao contractTermDao; + @Resource + private ContractImageDao contractImageDao; @Override public Contract load(Long id) { return dao.selectById(id); } + @Transactional(rollbackFor = Exception.class) @Override public Long save(Contract entity) { if (Objects.isNull(entity) || Objects.isNull(dao.selectById(entity.getId()))) { @@ -31,6 +40,18 @@ public class ContractRepositoryImpl implements ContractRepository { } else { dao.updateById(entity); } + if (CollUtil.isNotEmpty(entity.getContractTermList())) { + entity.getContractTermList().forEach(contractTerm -> { + contractTerm.setContractId(entity.getId()); + contractTermDao.insert(contractTerm); + }); + } + if (CollUtil.isNotEmpty(entity.getContractImageList())) { + entity.getContractImageList().forEach(contractImage -> { + contractImage.setContractId(entity.getId()); + contractImageDao.insert(contractImage); + }); + } return entity.getId(); } 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 index 0e9865d..eb822fc 100644 --- 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 @@ -1,5 +1,12 @@ package com.qniao.dam.query.contract; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.qniao.dam.api.query.contract.user.request.UserPageCustomizedServiceContractQueryParams; +import com.qniao.dam.api.query.contract.user.response.UserPageCustomizedServiceContractVo; +import com.qniao.domain.QnPage; +import com.qniao.framework.utils.PageUtil; + public interface ContractQueryService { + IPage pageCustomizedServiceContract(UserPageCustomizedServiceContractQueryParams queryParams, PageUtil pageUtil); } 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 index 632fc41..4b06d8d 100644 --- 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 @@ -1,9 +1,65 @@ package com.qniao.dam.query.contract.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.qniao.dam.api.query.contract.user.request.UserPageCustomizedServiceContractQueryParams; +import com.qniao.dam.api.query.contract.user.response.ContractImageVo; +import com.qniao.dam.api.query.contract.user.response.ContractTermVo; +import com.qniao.dam.api.query.contract.user.response.UserPageCustomizedServiceContractVo; +import com.qniao.dam.domain.aggregate.contract.valobj.ContractImage; +import com.qniao.dam.domain.aggregate.contract.valobj.ContractTerm; +import com.qniao.dam.infrastructure.persistent.dao.contract.ContractDao; +import com.qniao.dam.infrastructure.persistent.dao.contract.ContractImageDao; +import com.qniao.dam.infrastructure.persistent.dao.contract.ContractTermDao; import com.qniao.dam.query.contract.ContractQueryService; +import com.qniao.framework.utils.PageUtil; +import com.qniao.framework.utils.TypeConvertUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + @Service public class ContractQueryServiceImpl implements ContractQueryService { + @Resource + private ContractDao contractDao; + @Resource + private ContractTermDao contractTermDao; + @Resource + private ContractImageDao contractImageDao; + + @Override + public IPage pageCustomizedServiceContract(UserPageCustomizedServiceContractQueryParams queryParams, + PageUtil pageUtil) { + IPage page = contractDao.pageCustomizedServiceContract(pageUtil.toPageWithoutOrders(), queryParams); + if (page.getRecords().size() > 0) { + List contractIdList = page.getRecords().stream().map(UserPageCustomizedServiceContractVo::getId).collect(Collectors.toList()); + Map> allContractTermVoMap = mapContractTermVo(contractIdList); + Map> allContractImageVoMap = mapContractImageVo(contractIdList); + page.getRecords().forEach(record -> { + record.setContractTermList(allContractTermVoMap.get(record.getId())); + record.setContractImageList(allContractImageVoMap.get(record.getId())); + }); + } + + return page; + } + + private Map> mapContractImageVo(List contractIdList) { + List contractImageList = contractImageDao.selectList(new LambdaQueryWrapper() + .in(ContractImage::getContractId, contractIdList)); + List contractImageVoList = TypeConvertUtils.convert(contractImageList, ContractImageVo.class); + return contractImageVoList.stream().collect(Collectors.groupingBy(ContractImageVo::getContractId)); + } + + private Map> mapContractTermVo(List contractIdList) { + List contractTermList = contractTermDao.selectList(new LambdaQueryWrapper() + .in(ContractTerm::getContractId, contractIdList)); + List contractTermVoList = TypeConvertUtils.convert(contractTermList, ContractTermVo.class); + return contractTermVoList.stream().collect(Collectors.groupingBy(ContractTermVo::getContractId)); + } } \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/resources/mapper/contract/ContractMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/contract/ContractMapper.xml new file mode 100644 index 0000000..4d33797 --- /dev/null +++ b/dating-agency-mall-server/src/main/resources/mapper/contract/ContractMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + +